認証情報とプリフライト リクエストを使用して CORS を実装していますが、Firefox 30 ではプリフライト リクエストが一貫して失敗するのに、Safari (7.0.2) と Chrome 35 では機能する理由が少しわかりません。認証された CORS リクエストのプリフライト OPTIONS リクエストは Chrome では機能しますが、Firefox では機能しませんか?」というのは、401 ではなく、ブラウザー クライアントから CORS 固有のメッセージを受け取っているからです。
「クロスオリジン リクエストがブロックされました: 同一オリジン ポリシーにより、 http://myurl.dev.comでのリモート リソースの読み取りが許可されません。これは、リソースを同じドメインに移動するか、CORS を有効にすることで修正できます。」
ソースコードを表示せずに、私がやっていることは次のとおりです。
サーバー上:
OPTIONS 応答のヘッダー:
- Access-Control-Allow-Origin: [[リクエストのオリジンをここにコピー]]
- Access-Control-Allow-Methods: "POST GET OPTIONS"
- Access-Control-Allow-Headers: "X-Requested-With"
- Access-Control-Allow-Credentials: 「真」
POST 応答のヘッダー:
- Access-Control-Allow-Origin: [[リクエストのオリジンをここにコピー]]
- Access-Control-Allow-Credentials: 「真」
ブラウザー クライアントで:
jQuery.ajax({
url: requestUrl,
type: 'POST',
data: getData(),
xhrFields: {
withCredentials: true
}
});
仕様によると、これにより、応答に CORS ヘッダーが必要な OPTIONS プリフライト リクエストがトリガーされます。私は W3C 仕様を何度か読んだことがありますが、そのプリフライト応答で何が間違っているのかを特定できません。