私は Web API を構築しています。Chrome を使用して API に POST や GET を行うと、実際のリクエストの前に必ず OPTIONS リクエストが送信され、非常に煩わしいことが分かりました。現在、サーバーは OPTIONS リクエストを無視します。ここでの質問は、サーバーの負荷を 2 倍にする OPTIONS リクエストを送信するのに何が良いのかということです。ブラウザーが OPTIONS リクエストを送信するのを完全に停止する方法はありますか?
ベストアンサー1
編集 2018-09-13 : この応答の最後に、このプリフライト要求とそれを回避する方法についての詳細を追加しました。
OPTIONS
preflight
リクエストは、 でリクエストと呼ばれるものですCross-origin resource sharing (CORS)
。
特定の状況で異なるオリジン間でリクエストを行う場合に必要です。
このプリフライト リクエストは、実行中のリクエストがサーバーによって信頼されていることを確認するための安全対策として、一部のブラウザーによって行われます。つまり、サーバーは、リクエストで送信されるメソッド、オリジン、およびヘッダーが安全に処理できるものであることを理解します。
クロスオリジン リクエストを実行しようとするときは、サーバーはこれらのリクエストを無視するのではなく、処理する必要があります。
良いリソースはここにありますhttp://enable-cors.org/
これらを快適に処理する方法は、OPTIONS
メソッドを持つパスに対してサーバーがこのヘッダーを含む応答を送信するようにすることです。
Access-Control-Allow-Origin: *
これにより、サーバーがあらゆるオリジンからのリクエストに応答する用意があることがブラウザに通知されます。
CORSサポートをサーバーに追加する方法の詳細については、次のフローチャートを参照してください。
http://www.html5rocks.com/static/images/cors_server_flowchart.png
編集 2018-09-13
CORSOPTIONS
リクエストは、以下の説明にあるように、特定の場合にのみトリガーされます。MDNドキュメント:
一部のリクエストは CORS プリフライトをトリガーしません。この記事では、これらのリクエストを「シンプル リクエスト」と呼びますが、Fetch 仕様 (CORS を定義する) ではこの用語は使用されていません。CORS プリフライトをトリガーしないリクエスト (いわゆる「シンプル リクエスト」) は、次の条件をすべて満たすリクエストです。
許可される方法は次のとおりです。
- 得る
- 頭
- 役職
ユーザー エージェントによって自動的に設定されるヘッダー (たとえば、Connection、User-Agent、または Fetch 仕様で「禁止ヘッダー名」として定義されている名前を持つその他のヘッダー) とは別に、手動で設定できるヘッダーは、Fetch 仕様で「CORS セーフリスト リクエスト ヘッダー」として定義されている次のヘッダーのみです。
- 受け入れる
- 受け入れ言語
- コンテンツ言語
- コンテンツタイプ(ただし、以下の追加要件に注意してください)
- 北朝鮮
- ダウンリンク
- セーブデータ
- ビューポート幅
- 幅
Content-Type ヘッダーに許可される値は次のとおりです。
- アプリケーション/x-www-form-urlencoded
- マルチパート/フォームデータ
- テキスト/プレーン
リクエストで使用される XMLHttpRequestUpload オブジェクトにはイベント リスナーが登録されていません。これらには、XMLHttpRequest.upload プロパティを使用してアクセスします。
リクエストでは ReadableStream オブジェクトは使用されません。