CORS withCredentials XHR预检未在Firefox中发布Cookie

时间:2012-04-12 23:57:12

标签: html5 firefox cookies cors

我正在尝试使用凭据进行CORS XHR发布。它适用于Chrome,但不适用于Firefox。 Cookie不会出现在转机前请求标头中,因此我看到的是302.这在Chrome中完美运行,因为Cookie位于转发前请求标头中,后续POST通过。

为什么这不适用于FF?我错过了什么?

// assume url, boundEventHandler and uploadData are defined, as this definitely works in Chrome
var xhr = new XMLHttpRequest(); 
xhr.open("POST", url, true); 
xhr.addEventListener ("readystatechange", boundEventHandler, false); 
xhr.withCredentials = true;  // FWIW, I've also tried the string 'true'
xhr.send(uploadData);

有什么想法吗?我看到一些帖子说我可以在服务器端代理请求,但我更愿意按照CORS规范来实现这一点。

谢谢!

2 个答案:

答案 0 :(得分:19)

根据https://www.w3.org/TR/cors/#resource-preflight-requests的规格,预检请求永远不会包含Cookie。具体来说,规范说:

  
      
  • 排除用户凭据。
  •   

指向https://www.w3.org/TR/cors/#user-credentials的链接,其中包含:

  

出于本规范的目的,术语用户凭证意味着   cookie,HTTP身份验证和客户端SSL(...)。

也就是说,上面引用的代码片段根本不涉及预检:没有上传事件监听器,方法是简单的方法,并且没有设置作者标头。因此,如果您真的看到了飞行前请求,那么第一个问题就是为什么会发生这种情况。您是否在Firefox中有任何扩展可能会更改您的XMLHttpRequest对象?

答案 1 :(得分:3)

现在Chromium(2014年7月4日)没有发送带有预检请求的cookie。 https://code.google.com/p/chromium/issues/detail?id=377541