max-age が 2 回ある・引用符つきの秒数
サーバーと CDN の両方が max-age を付け足し、片方が秒数を引用符で囲んでいる例です。重複時の扱いと、送信側が作ってはいけない引用符の形を指摘します。
入力
Cache-Control ヘッダーの値
Cache-Control: max-age=60 Cache-Control: max-age="300"
どちらのヘッダーか
レスポンス(サーバーから返るヘッダー)
結果
エラー 0 件・警告 2 件・情報 1 件
指摘(エラー・警告・情報)
- 情報 全体 2 行の値を 1 つの並びとしてつなげて読みました(同じヘッダーが複数あるときと同じ扱い)。
- 警告 2 番目(max-age) max-age が 2 回以上あります(最初は 1 番目(max-age))。キャッシュは最初のものを使うか、応答を古い扱いにします(RFC 9111 4.2.1)。値を 1 つにしてください。
- 警告 2 番目(max-age) max-age の秒数を引用符で囲んではいけません(max-age=300 と書く。RFC 9111 では送信側は引用符の形を作ってはならない)。
| ブラウザ(個人用キャッシュ) | 保存する。60 秒(1分)は確認なしで使える |
|---|---|
| CDN・プロキシ(共有キャッシュ) | 保存する。60 秒(1分)は確認なしで使える |
| 読み取った指示の数 | 2 個 |
指示ごとの意味
| 指示 | 値 | 意味 | 根拠 |
|---|---|---|---|
| max-age | 60 秒(1分) | 保存した応答を 60 秒(1分) の間は新しい(fresh)ものとして使ってよい。過ぎたら古い(stale)扱い | RFC 9111 5.2.1.1 / 5.2.2.1 |
| max-age | 300 秒(5分) | 保存した応答を 300 秒(5分) の間は新しい(fresh)ものとして使ってよい。過ぎたら古い(stale)扱い | RFC 9111 5.2.1.1 / 5.2.2.1 |
検算(この結果になる理由)
2 行は 1 つの並びとしてつながり(情報 1 件)、max-age が重複するため警告、2 つ目の "300" は引用符の形のため警告になります。RFC 9111 4.2.1 節では重複時は最初の値を使うか古い扱いにするため、要約は最初の 60 秒(1 分)で計算します。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- Expires・Pragma・Vary・Age など Cache-Control 以外のヘッダーとの組み合わせは判定しません(貼り付けても読み飛ばします)。
- CDN やブラウザ製品ごとの独自の挙動・独自の指示(製品固有の拡張)は判定せず、仕様にない指示として扱います。
- 実際にサーバーへ接続してヘッダーを取得する機能はありません。貼り付けた文字だけを読みます。
- 応答のステータスコードや認証の有無によって保存の可否が変わる規則(RFC 9111 3 節)までは考慮しません。
ご利用にあたって
- 結果は仕様(RFC)にもとづく読み解きで、特定の CDN・ブラウザでの実際の動作を保証するものではありません。
- 本番の設定を変えるときは、検証環境で実際の応答ヘッダーとキャッシュの挙動を確認してください。