web-dev-qa-db-ja.com

Internet Explorer 10はXMLHttpRequest 'xhr.withCredentials = true'を無視しています

現在、IE10を使用したクロスドメインのajax呼び出しに問題があります(IE10モードでは互換性なし)。

状況:http://ahttp://bの2つのドメインがあります。 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 sendがGETであり、Cookieが存在しないため、401が発生するため、違いはありません)。

さらに、JSスニペットはFirefoxとOperaの両方で正常に動作します。

21
Rendijs S

おそらく同じですIE P3Pの問題。IEのデフォルト設定では、応答にP3Pヘッダーも存在しないCookieが設定されている場合、Cookieは「ファーストパーティのみ」としてマークされます。つまり、iframeやCORSリクエストなどのサードパーティのコンテキストでは、IEはCookieの送信を拒否します。

これを修正するには、Cookieを設定するときにP3Pヘッダーを指定する必要があります。詳細は http://msdn.Microsoft.com/en-us/library/ms537343%28v=vs.85%29.aspx を参照してください。

更新:リンクは停止していますが、 インターネットアーカイブ で確認できます。

25
Anomie