CORSプリフライト
「単純でない」クロスオリジン呼び出しの前に、ブラウザがその操作を許可するかサーバーに尋ねるために送る追加のOPTIONSリクエスト。引き金は、独自ヘッダー、GET/POST/HEAD以外のメソッド、フォームエンコード以外のContent-Typeなど。
流れは次のとおり。1) ブラウザがAccess-Control-Request-MethodとHeadersを付けてOPTIONSを送る。2) サーバーがAccess-Control-Allow-Origin、Allow-Methods、Allow-Headers(キャッシュ用にMax-Ageも)で応答する。3) 本来のリクエストが通る。往復が1回増えるため性能に響くので、Access-Control-Max-Ageでキャッシュして緩和する(既定値はChromeで5秒、Firefoxで24時間)。よくある落とし穴は、サーバーにOPTIONSのハンドラがなくプリフライトが失敗し、理由のはっきりしないCORSエラーになることだ。fetch のエラーメッセージは曖昧で、原因はDevToolsのネットワークタブでOPTIONSの失敗として確認できる。