Fineuploader CORS无法在Chrome中运行

时间:2013-09-30 08:10:03

标签: cors fine-uploader

我在CORS环境中有很好的上传工作。我可以在IE8 + IE9中显示成功响应,进度条变为绿色,响应数据成功,以及附加到json响应的脚本标记,我的图像上传到服务器......一切正常。

我有点卡住了相同的代码在现代浏览器中工作。例如Chrome返回成功为真,json块返回上传的图像(正确上传到服务器),但响应有脚本标签,插件显示对用户的错误响应..所以我几乎在那里,一切无论使用何种浏览器,都会添加脚本标记。

现在,根据以下页面:http://blog.fineuploader.com/2013/01/31/cors-support-in-3-3/,'如果请求没有X-Requested-With标头,则通过隐藏iframe内的表单提交发送传入上传请求,或者X-Requested-With标头的值不是XMLHttpRequest'。所以我在php中检查以下变量:echo $_SERVER['HTTP_X_REQUESTED_WITH'];并在Chrome中返回为undefined。

我的完整检查如下:

if ((!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) || (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] != "XMLHttpRequest")) {
header("Content-Type: text/html");
    $result['uuid'] = $_REQUEST['qquuid'];
    echo json_encode($result);
    echo "<script src=\"http://".$_SERVER['HTTP_HOST']."/frontend/js/iframe.xss.response-3.7.1.js\"></script>";
} else {
    header('Content-Type: text/plain');
    echo json_encode($result);
}

因此无论浏览器如何,首先是阻止失败并且每次都返回脚本响应。

我可以在我的选项响应标题中看到允许的“X-Requested-With”标题。但是我没有看到这个值与实际的上传请求一起传递,所以很明显它不能在if语句中检查。所以我可以看到我的代码失败的地方,我只是不确定我需要做什么才能在第二次调用中获取标题,我是否需要手动添加它?...

有点失落,并会感激任何帮助。 感谢。

更新 这是我正在使用的fineuploader代码 code http://shapevoid.com/code.png

选项请求/响应 options http://shapevoid.com/options-request.jpg

上传请求/回复 upload http://shapevoid.com/upload-request.jpg

1 个答案:

答案 0 :(得分:0)

每次上传请求时,Fine Uploader始终将X-Requested-With标头发送到传统端点。正如Mark所说,您没有正确处理OPTIONS /预检请求。当然,OPTIONS请求不包含任何非标准标头。此请求由浏览器发送,而不是Fine Uploader。您必须确认OPTIONS请求。如果您确认预检(通过响应中适当的Access-Control-Allow- *标头),将发送基础上传请求,其中包含X-Requested-With标头。在预检请求中,将在Access-Control-Request-Headers请求标头中提及X-Requested-With标头。我建议你看看我在博客文章中提到的链接,它更详细地介绍了CORS支持。 (https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS)。

我可以向您保证,基础请求中存在X-Requested-With标头。如果您没有在服务器端看到它,那么您的代码就会出现问题。有关详细信息,请查看Chrome中的网络标签。