許可オリジンを * に広げたら資格情報つきが失敗する

特定のオリジンだけを許可していた設定を、運用が楽になるからと * に広げた変更の例です。Cookie を送る画面があるサービスで、変更が CORS チェックを壊すことを切り替え前に見つけます。

入力

A: 変更前の応答ヘッダー

Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST
Access-Control-Max-Age: 600

B: 変更後の応答ヘッダー

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, DELETE
Access-Control-Max-Age: 86400

リクエストの資格情報(credentials)

つき(Cookie や認証情報を送る。fetch の credentials: include など)

結果

エラー 1 件・警告 0 件・情報 0 件

指摘(エラー・警告・情報)

  • エラー B: Access-Control-Allow-Origin 資格情報つき(Cookie などを送る)のリクエストでは Access-Control-Allow-Origin を * にできません。リクエストの Origin をそのまま返してください(Fetch Standard 3.3.5)。
差分のあるヘッダー3 項目(全 6 項目中)
A のエラー・警告エラー 0 件・警告 0 件
B のエラー・警告エラー 1 件・警告 0 件
判定B で新たに規則違反(エラー)が出ます。切り替える前に確認してください
前提のリクエスト資格情報つき(Cookie などを送る)

ヘッダーごとの差分

ヘッダーごとの差分
ヘッダーA(変更前)B(変更後)差分
Access-Control-Allow-Originhttps://app.example.com*https://app.example.com → *
Access-Control-Allow-Credentialstruetrue同じ
Access-Control-Allow-MethodsGET, POSTGET, POST, DELETEB で追加: DELETE
Access-Control-Allow-Headers(なし)(なし)(どちらもなし)
Access-Control-Max-Age60086400A: 600 秒 → B: 86400 秒
Access-Control-Expose-Headers(なし)(なし)(どちらもなし)

検算(この結果になる理由)

資格情報つきでは Allow-Origin を * にできない(Fetch 3.3.5)ため、B のエラーは 1 件です。A は特定のオリジンと true の組み合わせで問題なしです。差分は Allow-Origin・Allow-Methods(DELETE の追加)・Max-Age(600 秒から 86400 秒)の 3 項目です。

判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。

このツールの制約

ご利用にあたって

  • 結果は Fetch Standard にもとづく読み解きで、個々のブラウザやプロキシ、CDN での実際の動作を保証するものではありません。
  • 本番の設定を変えるときは、検証環境で実際のブラウザの開発者ツールを使い、リクエストが通ることを確認してください。

ほかの入力例