[解決済み] CORSプリフライトキャッシュをドメイン全体に適用する方法
質問
CORS を使用する REST アプリケーションを構築しています。すべての REST 呼び出しは異なっており、プリフライト OPTIONS 呼び出しを取得する際にかなりのオーバーヘッドがあることが分かっています。同じドメインへの後続の呼び出しがキャッシュされた応答を使用するように、プリフライト OPTIONS の結果をキャッシュして適用する方法はありますか?
どのように解決するのですか?
プリフライトはリクエストにのみ適用でき、ドメイン全体には適用できません。同じ質問をメーリングリストに持ち込んだところ、セキュリティ上の懸念がありました。以下はそのスレッド全体です。 http://lists.w3.org/Archives/Public/public-webapps/2012AprJun/0228.html
プリフライト要求の回数を制限したい場合、考慮すべき点がいくつかあります。まず、WebKit/Blink ベースのブラウザでは、プリフライト キャッシュの最大値が 10 分に設定されていることに注意してください。
https://github.com/WebKit/webkit/blob/master/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp https://chromium.googlesource.com/chromium/blink/+/master/Source/core/loader/CrossOriginPreflightResultCache.cpp
(となっています(他のブラウザでもそうなのかはわかりません)。そのため、Access-Control-Max-Age ヘッダは常に設定する必要がありますが、最大値は 10 分です。
次に、PUT/DELETE リクエストのプリフライトを回避することは不可能であることに注意してください。そのため、API の更新/削除には、少なくとも 10 分ごとに 1 回のプリフライトが必要になります。
GET/POSTでは、カスタムヘッダは可能な限り避けてください。APIがJSONを返す場合、Content-Typeが'application/json'の場合もプリフライトをトリガーすることに注意してください。
もし、あなたのAPIがどれだけRESTfulであるかを曲げたいのであれば、さらにいくつかのことを試してみることができます。1 つは、「text/plain」のようなプリフライトを必要としない Content-Type を使用することです。カスタムヘッダは常にプリフライトを引き起こすので、もしカスタムヘッダがあるなら、それをクエリパラメータに移動させることができます。極端な話、JSON-RPC のようなプロトコルを使用して、すべてのリクエストを単一のエンドポイントに送信することもできます。
正直なところ、ブラウザのプリフライトキャッシュの上限は 10 分で、REST のリソース URL のため、プリフライトキャッシュはかなり役に立ちません。長い間実行されるアプリのコースでプリフライトを制限するためにできることはほとんどありません。CORS 仕様の作成者が将来的にこれに対処しようとすることを期待しています。
関連
-
[解決済み】「プリフライトが無効です(リダイレクト)」または「プリフライト要求に対してリダイレクトは許可されていません」を解決する方法
-
[解決済み] Access-Control-Expose-Headersはなぜ必要なのですか?
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] CORSです。資格情報フラグが true の場合、Access-Control-Allow-Origin でワイルドカードを使用できない。
-
[解決済み] アクセス制御-許可-起源のワイルドカードサブドメイン、ポート、プロトコル
-
[解決済み】プリフライトCORSリクエストの導入の動機は何ですか?
-
[解決済み】不透明な応答とは何ですか、そしてそれはどのような目的ですか?
-
[解決済み】ASP.net Core WebAPIでCORSを有効にする方法
-
[解決済み] Dev Tools NetworkでPre-flightリクエストをフィルタリング(非表示)する方法
-
[解決済み] CORS - httpリクエストの「プリフライト」はどうやるの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン