Prefilghtリクエストとは?
Preflightはサイバー攻撃への対策として登場した技術らしいです。
ブラウザ側で本当のリクエストを投げる前に送られるリクエストです。
PreflightのHTTPメソッドは常にOPTIONSです。
(たとえばPOSTをしてもPreflightリクエストはOPTIONSとなります。)
解決方法
OPTIONSのメソッドに返すレスポンスを作成します。
bodyは空でいいです。ヘッダーはちゃんと書きましょう。
Preflightリクエストにはaccess-control-request-headers
とorigin
が入っています。
ApiGatewayのtemplateのAllowHeadersに以下の赤い枠の中の内容を追記します。
(この手順を省略しても通る場合がありました。)
わかったこと
- OPTIONSではApiキーの指定ができなさそうです。
- Access-Control-Allow-OriginがないとPrefilghtが通らないです。
-
LambdaではなくてDjangoのAPIは、自動でOPTIONSメソッドに対応してくれました。「DjangoのAPI、CORSエラーを解決」を参照 - Credentialsの設定と関連して、Access-Control-Allow-Originを*にすると通らない場合があります。