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-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 | (なし) | (なし) | (どちらもなし) |
初期表示は入力例「許可オリジンを * に広げたら資格情報つきが失敗する」の結果です。入力を変えるとその場で処理し直します。判定の根拠は仕様と根拠にまとめています。
ご利用にあたって
- 結果は Fetch Standard にもとづく読み解きで、個々のブラウザやプロキシ、CDN での実際の動作を保証するものではありません。
- 本番の設定を変えるときは、検証環境で実際のブラウザの開発者ツールを使い、リクエストが通ることを確認してください。
使い方
- 変更前に返っていた応答ヘッダーを A に、変更後に返る(予定の)応答ヘッダーを B に貼り付けます。
- ブラウザ側のリクエストが Cookie や認証情報を送るもの(credentials: include)かどうかを選びます。迷ったら「つき」のほうが厳しく判定します。
- 表で A と B の差分を確かめ、指摘の欄にエラーがあれば、その書き方では CORS チェックが失敗するので文言に沿って直します。
- 直した設定を 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 件 |
このツールでできないこと(制約)
- 実際のサーバーへ接続してヘッダーを取得する機能はありません。貼り付けた文字だけを読みます。
- Vary: Origin など Access-Control-* 以外のヘッダーとの組み合わせ(CDN のキャッシュを含む)は判定せず、読み飛ばします。
- preflight(OPTIONS)の応答か通常の応答かは区別しません。Allow-Methods・Allow-Headers・Max-Age は preflight の応答で使われるヘッダーです。
- リクエスト側の Origin・メソッド・ヘッダーとの突き合わせ(この設定で実際にそのリクエストが通るか)まではしません。
よくある質問
資格情報つきなのに 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)で配信しています。社内のドメイン名を含むヘッダーでも安心して試せます。