CORS Policy 違反と,Preflight request (OPTIONS) について
こんにちは、 @kz_morita です。
今回は,現在実装しているサービスで遭遇したエラーとそれについて調べる過程で調査した,HTTP の Preflight request についてまとめていきます.
発生したエラー 前提として,いま開発しているサービスは,Web Server と,API Server が別れています.
(つまり https://example.com と https://api.example.com のようにドメインが別になっています)
そして,普通に API に対して GET リクエストを送っていたときは問題なかったのですが,POSTリクエストを送ろうとしたときに以下のようなエラーが発生しました.
Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.
エラーメッセージからどうやら CORS 系のエラーだろうなと思って調べたところ,どうやら Preflight request (OPTIONS) が飛んでいて,その影響で API Server (正確にはその前にいた nginx ) の Access-Control-Allow-Headers に Content-Type が記載されていなかったことが原因でした.
Preflight request とは Preflight request とは,CORS (Cross-Origin Resource Sharing) の中でブラウザが自動で飛ばすリクエストで,特定の条件を満たすと Chrome の Network タブなどに OPTIONS という HTTP Method でリクエストが投げられていることが確認できます.