資格情報つきの Allow-Headers に * を書いた
どんなヘッダーでも通したいと Allow-Headers を * にしたが、Cookie つきのリクエストでは効かない例です。* を許可するヘッダー名の明示に置き換えた B と比べて、警告が消えることを確かめます。
入力
A: 変更前の応答ヘッダー
Access-Control-Allow-Origin: https://app.example.com Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: *
B: 変更後の応答ヘッダー
Access-Control-Allow-Origin: https://app.example.com Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: Content-Type, Authorization
リクエストの資格情報(credentials)
つき(Cookie や認証情報を送る。fetch の credentials: include など)
結果
エラー 0 件・警告 1 件・情報 0 件
指摘(エラー・警告・情報)
- 警告 A: Access-Control-Allow-Headers 資格情報つきのリクエストでは Access-Control-Allow-Headers の * はワイルドカードにならず、「*」という名前そのものとして扱われます。許可する名前を 1 つずつ書いてください(Fetch Standard 3.3.4・3.3.5)。
| 差分のあるヘッダー | 1 項目(全 6 項目中) |
|---|---|
| A のエラー・警告 | エラー 0 件・警告 1 件 |
| B のエラー・警告 | エラー 0 件・警告 0 件 |
| 判定 | A・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 | (なし) | (なし) | (どちらもなし) |
| Access-Control-Allow-Headers | * | Content-Type, Authorization | B で追加: Content-Type, Authorization / B で削除: * |
| Access-Control-Max-Age | (なし=既定 5 秒) | (なし=既定 5 秒) | 同じ(有効な値 5 秒) |
| Access-Control-Expose-Headers | (なし) | (なし) | (どちらもなし) |
検算(この結果になる理由)
資格情報つきのとき Allow-Headers の * はワイルドカードにならず、「*」という名前そのものになります(Fetch 3.3.4・3.3.5)。A は警告 1 件、B は名前を明示しているので 0 件です。差分は B で Content-Type と Authorization が追加され、* が削除された 1 項目です。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 実際のサーバーへ接続してヘッダーを取得する機能はありません。貼り付けた文字だけを読みます。
- Vary: Origin など Access-Control-* 以外のヘッダーとの組み合わせ(CDN のキャッシュを含む)は判定せず、読み飛ばします。
- preflight(OPTIONS)の応答か通常の応答かは区別しません。Allow-Methods・Allow-Headers・Max-Age は preflight の応答で使われるヘッダーです。
- リクエスト側の Origin・メソッド・ヘッダーとの突き合わせ(この設定で実際にそのリクエストが通るか)まではしません。
ご利用にあたって
- 結果は Fetch Standard にもとづく読み解きで、個々のブラウザやプロキシ、CDN での実際の動作を保証するものではありません。
- 本番の設定を変えるときは、検証環境で実際のブラウザの開発者ツールを使い、リクエストが通ることを確認してください。