CORS ヘッダーの差分比較

CORS の応答ヘッダー 2 組を並べ、変わった所と仕様に反する所を示す。

変更前と変更後の Access-Control-Allow-* ヘッダーを貼り付けると、項目ごとの差分と、資格情報つきで * を使っている・Allow-Credentials の値が true でないといった Fetch Standard に反する書き方を日本語で指摘します。入力はブラウザの中だけで処理します。

ツールを使う 入力例と結果

CORS ヘッダーを 2 組貼り付けて比べる

入力した内容は送信されません。貼り付けた文字や選んだファイルは、お使いのブラウザの中だけで処理します。本サイトのサーバーや第三者へ送信・保存しません(通信を禁止する設定でページを配信しています)。

結果

エラー 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(なし)(なし)(どちらもなし)

初期表示は入力例「許可オリジンを * に広げたら資格情報つきが失敗する」の結果です。入力を変えるとその場で処理し直します。判定の根拠は仕様と根拠にまとめています。

ご利用にあたって

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

使い方

  1. 変更前に返っていた応答ヘッダーを A に、変更後に返る(予定の)応答ヘッダーを B に貼り付けます。
  2. ブラウザ側のリクエストが Cookie や認証情報を送るもの(credentials: include)かどうかを選びます。迷ったら「つき」のほうが厳しく判定します。
  3. 表で A と B の差分を確かめ、指摘の欄にエラーがあれば、その書き方では CORS チェックが失敗するので文言に沿って直します。
  4. 直した設定を B に貼り直し、B のエラーが 0 件になったことを要約で確かめます。

入力例と結果

代表的な入力・境界の入力・壊れた入力の例です。例ごとに入力・出力・指摘と、その結果になる理由(検算)を載せています。

入力例と結果の一覧
入力例結果
許可オリジンを * に広げたら資格情報つきが失敗するエラー 1 件・警告 0 件・情報 0 件
PUT の許可と preflight の保存期間を延ばす変更エラー 0 件・警告 0 件・情報 0 件
Allow-Credentials の値が True になっているエラー 1 件・警告 0 件・情報 0 件
Allow-Origin の末尾に / が付いているエラー 1 件・警告 0 件・情報 0 件
資格情報つきの Allow-Headers に * を書いたエラー 0 件・警告 1 件・情報 0 件

このツールでできないこと(制約)

よくある質問

資格情報つきなのに Allow-Origin を * にするとなぜ失敗しますか?

Fetch Standard 3.3.5 節が、資格情報つきのリクエストでは Allow-Origin に * を使えず、リクエストの Origin と同じ値を返すと定めているためです。許可するオリジンの一覧を持ち、一致したものだけを返す実装にします。

Access-Control-Allow-Credentials: True が通らないのはなぜですか?

この値の書式は小文字の true だけで、大文字小文字を区別すると 3.3.4 節に書かれています。True や TRUE は不正な値として扱われ、資格情報つきのリクエストの CORS チェックが失敗します。

貼り付けたヘッダーはどこかに送られますか?

送られません。比較はお使いのブラウザの中だけで行い、ページは通信を禁止する設定(CSP の connect-src)で配信しています。社内のドメイン名を含むヘッダーでも安心して試せます。