概要
CORS対応としてAPI側で対応しないといけないことのまとめ。
対応内容
OPTIONSメソッド
preflight対応としてOPTIONSメソッドを実装する必要がある。
HTTPレスポンスヘッダ
※値は全てAPIが許容するモノのみとする
Access-Control-Allow-Headers: Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token
Access-Control-Allow-Methods: DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT
-
Access-Control-Max-Age: 600
※任意、例だと10分間 -
Access-Control-Allow-Origin: *
※クライアント側のFQDN
GET等各種メソッド
HTTPレスポンスヘッダ
※値は全てAPIが許容するモノのみとする
-
Access-Control-Allow-Origin: *
※クライアント側のFQDN -
Access-Control-Expose-Headers: *
※クライアント側がヘッダとして取得可能なものを指定する -
Access-Control-Allow-Credentials: true
※クッキーのやり取りが必要な場合
Access-Control-Allow-Credentials: true
の場合、Access-Control-Allow-Origin
はワイルドカードではなくOrigin
を指定しなければならないので注意。※MDNのCORS説明 参照
実装
- Originが想定と異なる場合、処理を継続しないようにする
※内部的には実際の処理が走ってしまっているとPOSTなどで悪戯可能になるため
注意点
シンプルなリクエスト*1 の場合、preflightは行われない為、preflight無しでも成立できるように必要あり。
*1 JavaScript無しで、ブラウザからの操作で可能なリクエストと等価なAPIコール、
※ 例:ただのGETリクエストや、フォーム送信(Content-Typeがapplication/x-www-form-urlencodedなPOST)等)
※ MDNのCORS説明 の シンプルな cross-site リクエスト
参照