32

認証情報とプリフライト リクエストを使用して 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 仕様を何度か読んだことがありますが、そのプリフライト応答で何が間違っているのかを特定できません。

4

4 に答える 4