17

資格情報を使用して CORS XHR 投稿を実行しようとしています。Chrome では問題なく機能しますが、Firefox では機能しません。Cookie はプリフライト リクエスト ヘッダーに存在しないため、302 が表示されます。Cookie はプリフライト リクエスト ヘッダーにあり、その後の POST が通過するため、これは Chrome で完全に機能します。

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仕様に従ってこれを機能させたいと思います。

ありがとう!

4

2 に答える 2

20

https://www.w3.org/TR/cors/#resource-preflight-requestsの仕様によると、プリフライト リクエストには Cookie が含まれません。具体的には、仕様は次のように述べています。

  • ユーザー資格情報を除外します。

そして、それはhttps://www.w3.org/TR/cors/#user-credentialsへのリンクです:

この仕様におけるユーザー資格情報という用語は、Cookie、HTTP 認証、およびクライアント側 SSL (...) を意味します。

とはいえ、上記で引用したコード スニペットには、プリフライトをまったく含めるべきではありません。アップロード イベント リスナーはなく、メソッドは単純なメソッドであり、作成者ヘッダーは設定されていません。したがって、実際にプリフライト リクエストが表示されている場合、最初の質問は、なぜそれが起こっているのかということです。XMLHttpRequest オブジェクトを変更している可能性がある Firefox の拡張機能はありますか?

于 2012-04-13T04:47:11.620 に答える
3

現在、Chromium (2014 年 7 月 4 日) はプリフライト リクエストで Cookie を送信しません。 https://code.google.com/p/chromium/issues/detail?id=377541

于 2014-11-06T03:23:50.713 に答える