30

JSON ペイロードの CORS リクエストを送信しようとしています。サーバーとクライアントの両方を制御します。

私はここに従っています: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control

サーバーには、すべてのリクエストとともに送信する必要があるカスタム ヘッダーがあります。したがって、このカスタム ヘッダーはリクエストを「単純ではない」ものにするため、リクエストは OPTIONS リクエストでプリフライトする必要があります。

OPTIONS リクエストを作成している jquery を確認できますが、カスタム ヘッダーは送信されません。

私が試した方法:

どちらの場合も、ブラウザはカスタム ヘッダーを送信していません。

私はFF 17.0.1、jquery 1.8.3を使用しています。

4

1 に答える 1

42

あなたの問題はjqueryではなく、CORSの仕組みにあります。あなたの beforeSend コールバックはおそらく期待どおりに機能していました...しかし、ブラウザは何があっても、プリフライト リクエストでカスタム ヘッダーを送信しません。これは仕様によるものです。プリフライト リクエストの目的は、CORS 仕様で定義されている「単純な」ものを超えて、ユーザー エージェント (ブラウザ) が送信できる情報を決定することです。したがって、プリフライト リクエストの一部としてユーザー エージェントが単純でないデータ (カスタム ヘッダーなど) を送信することは自滅的です。

実際の CORS リクエストにカスタム ヘッダーを含めるようにユーザー エージェントに指示するには、プリフライト レスポンスにAccess-Control-Allow-Headersヘッダーを含めます。ユーザーエージェントが送信するヘッダーにあまり関心がない場合は、Access-Control-Request-Headersリクエストヘッダーフィールドの値をAccess-Control-Allow-Headers、応答で送信する の値としてエコーバックできると思います。

仕様の構文セクションでAccess-Control-Allow-*定義されている他のヘッダーの一部を含めることもできます。

CORS - httprequest を「プリフライト」するにはどうすればよいですか?も参照してください。

これらのヘッダーの動作を示すMozilla の CORS プリフライトの例も参照してください。

于 2012-12-21T21:12:31.697 に答える