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

Ren*_*s S 20 javascript ajax internet-explorer cors

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

情况:我有两个域名,http://ahttp://b.我有一个cookie设置http://b.我目前在页面上http://a.

我想做一个http://b使用XMLHttpRequest 的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();
Run Code Online (Sandbox Code Playgroud)

这应该确保cookie附加到请求; 然而,Fiddler跟踪显示没有附加cookie,我得到了401: Access Denied.

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

Access-Control-Allow-Origin: http://a
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)

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

此外,JS代码段在Firefox和Opera中均可正常运行.

Ano*_*mie 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.

更新:链接已经死了,但您可以在Internet Archive中看到它

  • 如果答案可以更新到这个标题应该是什么来节省时间超过文档:)会很好:) (4认同)