Internet Explorer 10忽略XMLHttpRequest'xhr.withCredentials = true'

时间:2012-09-28 16:34:27

标签: javascript ajax internet-explorer cors

我目前遇到使用IE10进行跨域ajax调用的问题(在IE10模式下,不兼容)。

情况: 我有两个域名http://ahttp://b。我为http://b设置了Cookie。我目前正在页面http://a

我想使用XMLHttpRequest对http://b执行CORS请求(根据http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx,这应该有效),并在请求中包含cookie。 JS如下:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://b', true);
xhr.withCredentials = true;
xhr.send();

这应确保cookie附加到请求中;但是,Fiddler跟踪显示没有附加cookie,我得到401: Access Denied

服务器配置为使用CORS,它包括Access-Control标头:

Access-Control-Allow-Origin: http://a
Access-Control-Allow-Credentials: true

(这应该没有任何区别,因为没有OPTIONS预检请求,并且IE发送的第一个请求是GET,并且cookie不存在,从而导致401)。

此外,JS代码段在Firefox和Opera中都能正常运行。

3 个答案:

答案 0 :(得分:24)

这可能与旧的IE P3P问题相同。使用IE的默认设置,如果设置的cookie没有响应中也存在P3P标头,则cookie将标记为“仅第一方”。这意味着在第三方上下文中,例如iframe或CORS请求,IE将拒绝发送cookie。

要解决此问题,您需要在设置Cookie时提供P3P标头。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms537343%28v=vs.85%29.aspx

更新:链接现已停止,但您可以在the Internet Archive

看到它

答案 1 :(得分:-1)

我遇到了类似的问题,结果发现浏览器设置阻止了第三方Cookie(IE10> Internet选项>隐私>高级>第三方Cookie>接受)。为了解决这个问题,我选中了“覆盖自动cookie处理”,“接受”(第三方Cookie)和“始终允许会话cookie”。

答案 2 :(得分:-1)

我们添加了一个标题Vary:cookie并且它有效..