2012-04-12 3 views
13

私は信任状でCORS XHRの投稿をしようとしています。 Chromeではうまく動作しますが、Firefoxではうまく動作しません。クッキーはフライト前のリクエストヘッダには存在しないので、私は302を見ています。これはクッキーがフライト前のリクエストヘッダにあり、その後のPOSTが通過するので、Chromeでは完全に機能します。CORS withCredentials XHRプリフライトが公開されていないFirefoxでのCookie

なぜ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仕様に準拠してこれを動作させたいと思っています。

ありがとうございます!

+0

最新のFFのバージョンはありますか? – Francisc

答えて

15

https://www.w3.org/TR/cors/#resource-preflight-requestsのスペックでは、プリフライト要求にクッキーは含まれません。具体的には、スペックは言う:

とそのリンク:

本明細書の目的のために長期的なユーザーの資格情報は クッキー、HTTP認証、およびクライアント側のSSL(...)を意味します。

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

+0

良い点...コードスニペットでアップロードイベントリスナーを省略しました。スペックがこれを許さないのは残念です。誰かがクッキーを含めることを望むなら、それは許されるべきであると思われるでしょう。 –

+1

プリフライト要求のポイントは、誰かが何らかの奇妙な要求をしたいことを知らせ、適切に処理する方法を知っていればサーバーが明示的にホワイトリストを作成できるようにすることで、Webページからサーバーを保護することです...多くのサーバーはデフォルトで適切に処理する方法を知らないためです。これは、クッキーがないことを意味します。これは、無防備なサーバーに対して攻撃経路を開くためです。クッキーを許可する唯一の方法は、_server_指定されたクッキーが許可されている場合です。しかし、それはどうしたらいいでしょうか?プリフライトへの対応は、それがどのように行われるかです。 –

+0

興味深い。私はテストしましたが、Chromeはアップロードイベントリスナーのプリフライトをまったく行いません。それは...壊れているようだ。壊れた –

関連する問題