許可オリジンを * に広げたら資格情報つきが失敗する
特定のオリジンだけを許可していた設定を、運用が楽になるからと * に広げた変更の例です。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-Origin | https://app.example.com | * | https://app.example.com → * |
| Access-Control-Allow-Credentials | true | true | 同じ |
| Access-Control-Allow-Methods | GET, POST | GET, POST, DELETE | B で追加: DELETE |
| Access-Control-Allow-Headers | (なし) | (なし) | (どちらもなし) |
| Access-Control-Max-Age | 600 | 86400 | A: 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 項目です。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 実際のサーバーへ接続してヘッダーを取得する機能はありません。貼り付けた文字だけを読みます。
- Vary: Origin など Access-Control-* 以外のヘッダーとの組み合わせ(CDN のキャッシュを含む)は判定せず、読み飛ばします。
- preflight(OPTIONS)の応答か通常の応答かは区別しません。Allow-Methods・Allow-Headers・Max-Age は preflight の応答で使われるヘッダーです。
- リクエスト側の Origin・メソッド・ヘッダーとの突き合わせ(この設定で実際にそのリクエストが通るか)まではしません。
ご利用にあたって
- 結果は Fetch Standard にもとづく読み解きで、個々のブラウザやプロキシ、CDN での実際の動作を保証するものではありません。
- 本番の設定を変えるときは、検証環境で実際のブラウザの開発者ツールを使い、リクエストが通ることを確認してください。