資格情報つきの 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-Originhttps://app.example.comhttps://app.example.com同じ
Access-Control-Allow-Credentialstruetrue同じ
Access-Control-Allow-Methods(なし)(なし)(どちらもなし)
Access-Control-Allow-Headers*Content-Type, AuthorizationB で追加: 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 項目です。

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

このツールの制約

ご利用にあたって

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

ほかの入力例