我正在使用凭据和预检请求实现 CORS,我有点困惑为什么预检请求在 Firefox 30 中始终失败但在 Safari(7.0.2)和 Chrome 35 中有效。我认为这个问题不同于“为什么经过身份验证的 CORS 请求的预检 OPTIONS 请求在 Chrome 中有效,但在 Firefox 中无效? ” 因为我没有收到 401,而是来自浏览器客户端的特定于 CORS 的消息:
“跨域请求被阻止:同源策略不允许读取http://myurl.dev.com上的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。”
在不显示源代码的情况下,这就是我正在做的事情:
在服务器上:
选项响应的标题:
- Access-Control-Allow-Origin:[[从此处的请求复制来源]]
- 访问控制允许方法:“POST GET OPTIONS”
- 访问控制允许标头:“X-Requested-With”
- 访问控制允许凭据:“真”
POST 响应的标头:
- Access-Control-Allow-Origin:[[从此处的请求复制来源]]
- 访问控制允许凭据:“真”
在浏览器客户端中:
jQuery.ajax({
url: requestUrl,
type: 'POST',
data: getData(),
xhrFields: {
withCredentials: true
}
});
根据规范,这将触发一个 OPTIONS 预检请求,该请求需要在其响应中包含 CORS 标头。我已经多次阅读 W3C 规范,但我无法确定我做错了什么,如果有的话,在那个预检响应中。