ウェブアプリケーションが発展し、同一オリジンポリシーの制限を超えてデータのやり取りを行いたいというニーズが増えてきました。
その際サイトを超えたデータのやり取りに関する仕様として策定されたのがCORSです。
同一オリジンではない、他のサイトへのアクセスを制限するもので、同一オリジンである条件は以下を満たすもの。
異なるオリジンからの読み出しを許可するためには、Access-Control-Allow-Originというヘッダーを情報の提供元がHTTPレスポンスヘッダに付与する必要があります。
読み出し(GETメソッド)などのシンプルなリクエストの場合には上記のようにAccess-Control-Allow-Originを付与すれば問題ありませんでした。
しかしシンプルなリクエストではない場合には、ブラウザは異なるオリジンに対し、プリフライトリクエストを送信します。
シンプルなリクエストである条件は以下を満たすもの
メソッド
リクエストヘッダ
Content-Type
上記のリクエスト以外はプリフライトリクエストというHTTPリクエストを送ります。
デフォルトでは異なるオリジンに対するリクエスト内に、HTTP認証やクッキーなどの認証に用いられるリクエストヘッダは送信されません。認証を含むリクエストを行うには以下を満たす必要があります。
withCredentialsプロパティをtrueにする。Access-Control-Allow-Credentialsレスポンスヘッダーをtrueにする。参考ページ