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-age60 秒(1分)保存した応答を 60 秒(1分) の間は新しい(fresh)ものとして使ってよい。過ぎたら古い(stale)扱いRFC 9111 5.2.1.1 / 5.2.2.1
max-age300 秒(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 分)で計算します。

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

このツールの制約

ご利用にあたって

  • 結果は仕様(RFC)にもとづく読み解きで、特定の CDN・ブラウザでの実際の動作を保証するものではありません。
  • 本番の設定を変えるときは、検証環境で実際の応答ヘッダーとキャッシュの挙動を確認してください。

ほかの入力例