我在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
答案 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中的网络标签。