Age Inspect

キャッシュ関連ヘッダーを横断して判定します。入力はサーバーへ送信しません。再検証やCDN差分の一次切り分けに使えます。

状態

ブラウザ内で処理します。入力はサーバーへ送信しません。まずはここで一次切り分けしてください。

使い方

Age(必要ならDateも)を貼り付けて「解析」。秒数と、解釈の目安を表示します(ヘッダー行/複数行貼り付けOK、レスポンスヘッダー全体でもOK)。

注意(このツール)

  • Age は共有キャッシュのヒントです。実際のキャッシュ可否/期限は Cache-Control(max-age/s-maxage等)とセットで確認してください。

このページについて

何をするツール?

Age ヘッダーを解析して、共有キャッシュ(CDN/プロキシ)に溜まったレスポンスが「どれくらい経過しているか」を秒で表示します。

キャッシュが効いているのか、どの程度「古いものを見ているのか」を素早く判断したい時に役立ちます。

Age の基本

  • Age は「共有キャッシュに保持されてからの経過秒」を表す指標です。
  • 主に CDN / 共有プロキシで付与されることが多いです。
  • Age が 0 なら「今取りたて」ではなく「たまたま0秒」もあり得ます(推定の範囲)。

Cache-Control と一緒に見る理由

Age は「どれくらい古いか」の目安で、許容される古さは Cache-Control(max-age/s-maxage など)の設計で決まります。

  • Age が増え続けるのに更新されない:s-maxage/max-age/immutable を疑う
  • Age が常に 0:キャッシュされていない/バイパスされている/毎回再検証されている可能性

Ageをどう読む?(freshnessとの関係)

Age は「保持されてからの経過秒」で、fresh/stale の判定は Cache-Control(max-age / s-maxage など)や Expires で決まります。Age が大きい=必ず stale ではなく、「許容期間を超えているか」で判断します。

  • s-maxage=600(共有キャッシュ10分)で Age=120 → まだ fresh の可能性
  • s-maxage=600 で Age=1200 → stale(再検証/更新/再フェッチ)される可能性が高い
  • max-age が短いのに Age が大きい → その中間が「更新している」かは 304/ETag/Last-Modified も要確認

HIT/MISSとAge(違いを整理)

CDNには X-Cache / CF-Cache-Status のような「HIT/MISS」を示す独自ヘッダーがあることがあります。一方 Age は標準的なヒントで、HIT/MISS と同じ意味ではありません(ただし合わせて見ると推測が強くなります)。

  • Age が増える + HIT が出る → 共有キャッシュに乗っている可能性が高い
  • Age が 0 + MISS が続く → バイパス/未キャッシュ/割れ(Vary)を疑う
  • Age が 0 でも HIT の場合があり得る(ちょうど0秒のタイミング、再検証直後など)

構文(読み方)

Age は整数の秒数です。多くの場合、レスポンスヘッダーの Age: 123 のように表示されます。

  • Age: 0
  • Age: 42
  • Age: 86400

用語(このページの前提)

  • Shared cache: CDN/プロキシのような共有キャッシュ。
  • Freshness lifetime: キャッシュが fresh として扱われる期間(max-age/s-maxage/Expires等)。
  • Revalidation(再検証): stale なキャッシュを使う前に確認する動作(ETag/Last-Modified)。

例(どう解釈する?)

  • Age: 5 → 直近にキャッシュされた可能性が高い(ヒットしているかも)
  • Age: 3600 → 1時間程度同じエントリが生きている(s-maxageが大きいかも)
  • Age: 0 が連続 → 共有キャッシュが効いていない/バイパス/毎回再検証/分岐が割れている(Vary)などを疑う

よくある落とし穴

  • Age は “完全な真実” ではなく目安(実装や再検証で揺れる)
  • ブラウザキャッシュには Age が見えないことがある(CDN/共有キャッシュで主に有効)
  • CDNが Age を非表示/上書きする場合がある

CDN/プロキシ配下で起きがちなこと

Age は中間キャッシュが付ける値なので、経路(どのPOP/どのレイヤーを通ったか)で見え方が変わります。オリジン直アクセスと比較したい場合は、CDNをバイパスする経路を用意して差分を見るのが確実です。

  • 同じURLでもPOPが違うと Age がリセットされることがある
  • 再検証(304)でも Age が増える/戻るなど挙動が揺れることがある
  • 変換(圧縮/最適化)やキャッシュキーの設定で別エントリ扱いになることがある(Vary)

stale-while-revalidate等とAge

Cache-Control の stale-while-revalidate / stale-if-error などを使うと、期限切れでも「しばらく古いレスポンスを返して裏で更新する」挙動になります。その場合、Age が大きくても意図通りの可能性があります。

「古いのに返ってくる」が問題かどうかは、設計(許容する古さ)と目的(最新性が必要か)で判断します。

切り分け手順(おすすめ)

  • Response Headers Parser にレスポンスヘッダー全体を貼って Age/Cache-Control/Date を確認
  • このツールで Age(必要ならDateも)を整理し、増加/固定/リセットの傾向を見る
  • Vary Inspect でキャッシュ割れ(分岐過多)がないか確認

トラブル別チェックリスト

  • キャッシュが効かない: Ageが常に0、Cache-Controlがprivate/no-store/no-cache、Vary: * などを確認
  • 更新が反映されない: Ageが大きい、s-maxage/max-ageが大きい、immutable、パージ/バイパスの運用を確認
  • CORSが不安定: Originが動的なら Vary: Origin を確認(キャッシュ混在対策)

確認のしかた(curl)

同じURLを何度か叩き、Age の変化を見るとキャッシュ状況を推測しやすいです(URLは置き換えてください)。

  • curl -I https://example.com/asset.js
  • Age/Cache-Control/Date を確認し、このツールに貼り付けて整理
  • Cache-Control Inspect
  • Expires Inspect
  • ETag Inspect / Last-Modified Inspect
  • Vary Inspect
  • Response Headers Parser

推奨(実務)

  • Age は CDN/プロキシの情報。Cache-Control と合わせて判断
  • 共有キャッシュの可否は public/private を確認
  • Age の伸びが不自然なら中間キャッシュ階層を疑う

このツールでできること

  • Age の値を抽出して秒数として表示
  • Age が数値かどうかの検証
  • レスポンスヘッダー全体から Age/Date を抽出
  • Age と Date から「保存された時刻(推定)」を計算して表示

注意(運用)

  • キャッシュ挙動はブラウザ/CDN/プロキシの層で変わるため、同一点観測で比較してください。
  • ヘッダー診断だけでは不十分な場合があります。アプリ側の更新戦略とキー設計も確認してください。

参照仕様

  • RFC 9110(HTTP Semantics)
  • RFC 9111(HTTP Caching)
  • MDN: Age

FAQ

Age が無いのはおかしい?

必須ではありません。共有キャッシュを挟んでいない/表示しない設定の可能性があります。Cache-Control や他のキャッシュ指標も合わせて確認してください。

Age: 0 はキャッシュヒット?

必ずしもそうではありません。直後にキャッシュされた/再検証された/たまたま0秒だった等があり得ます。連続で観測するのが確実です。

Age が max-age / s-maxage を超えているのに返ってくるのはなぜ?

stale-while-revalidate などの許容、再検証(304)挙動、実装差、あるいは「別レイヤーのキャッシュ」を見ている可能性があります。Cache-Control 全体と ETag/Last-Modified の有無も合わせて確認してください。

参考リンク

  1. RFC 9110
  2. RFC 9111
  3. MDN: Age
  4. MDN: HTTP caching

site_map ルールに基づいて、次に確認すべきページを表示しています。

  1. If-Modified-Since Inspect — If-Modified-Since を解析して条件付き取得を確認
  2. Expires Inspect — Expires / Date を解析して期限挙動を確認
  3. If-None-Match Inspect — If-None-Match を解析して再検証条件を確認
  4. Last-Modified Inspect — Last-Modified / If-Modified-Since を解析
  5. Cache Not Working Troubleshooting — キャッシュが効かない症状をヘッダーから段階的に切り分け
  6. HTTP Cache Mismatch — キャッシュ不一致の原因候補を特定
  7. Cache Response Analyzer — レスポンスヘッダーからキャッシュ可否を判定
  8. Cache Key Inspect — URL/Vary/ヘッダーからキャッシュキー分岐を可視化

キャッシュ制御

Cache-Control/Expires/Age を横断して配信ポリシーを診断