Age Inspect

Analyze cache-related headers across layers. No input is sent to a server. Use it for first-pass revalidation and CDN mismatch troubleshooting.

Status

Runs in your browser. No input is sent to a server. Use this as a first-pass diagnostic step.

How to use

Paste Age (and optionally Date) and click “Parse”. It shows seconds and interpretation hints (header lines/multi-line paste OK; full response headers OK).

Notes (this tool)

  • Age is a shared-cache hint. Check Cache-Control (max-age/s-maxage, etc.) to determine cacheability/freshness.

About this page

What does this tool do?

Parse the Age header and show how long the response has been sitting in a shared cache (CDN/proxy), in seconds.

Useful to quickly tell whether you’re hitting cache and how stale-ish the response might be.

Age basics

  • Age indicates seconds since the response was stored in a shared cache.
  • It’s commonly added by CDNs/shared proxies.
  • Age=0 doesn’t always mean “origin fresh”; it can simply be 0 seconds at that moment (interpret as a hint).

Why check it with Cache-Control

Age is a rough “how old” signal; whether that age is acceptable depends on Cache-Control (max-age/s-maxage, etc.).

  • Age keeps rising and content never updates: suspect s-maxage/max-age/immutable
  • Age always 0: not cached, bypassed, or revalidated each time

How to read Age (relation to freshness)

Age is “seconds since stored”. Fresh/stale is decided by Cache-Control (max-age / s-maxage, etc.) or Expires. A large Age is not automatically stale—compare it to the allowed lifetime.

  • With s-maxage=600 and Age=120 → likely still fresh
  • With s-maxage=600 and Age=1200 → likely stale (revalidation/refetch may occur)
  • If max-age is short but Age is large, check 304/ETag/Last-Modified to see whether it’s being revalidated

HIT/MISS vs Age (clarify the difference)

Many CDNs expose proprietary HIT/MISS headers (e.g., X-Cache, CF-Cache-Status). Age is a more standard hint and is not the same thing—but using both can strengthen your inference.

  • Age increases + HIT → likely served from shared cache
  • Age=0 + repeated MISS → suspect bypass/not cached/fragmentation (Vary)
  • Age=0 can still appear with HIT (timing, immediately after revalidation, etc.)

Syntax (how to read)

Age is an integer number of seconds, typically shown as Age: 123 in response headers.

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

Glossary (terms used on this page)

  • Shared cache: a cache shared by many users (CDN/proxy).
  • Freshness lifetime: how long a response is considered fresh (max-age/s-maxage/Expires, etc.).
  • Revalidation: checking before reuse of stale entries (ETag/Last-Modified).

Examples (how to interpret)

  • Age: 5 → likely recently cached (could be a hit)
  • Age: 3600 → entry has lived ~1h (s-maxage might be large)
  • Repeated Age: 0 → suspect bypass/no caching/revalidation or cache fragmentation (Vary)

Common pitfalls

  • Age is a hint, not absolute truth (implementations and revalidation can affect it)
  • Age may not reflect browser cache (mainly relevant for shared caches)
  • Some CDNs hide/overwrite Age

Common issues behind CDN/proxies

Age is set by intermediaries, so it can differ by path (POP/layer). If you need ground truth, compare against a known origin-bypass path.

  • Different POPs can yield different Age (resets) for the same URL
  • During revalidation (304), Age may still increase/reset depending on implementation
  • Transforms (compression/optimization) or cache-key rules can create separate entries (Vary)

stale-while-revalidate and Age

With Cache-Control directives like stale-while-revalidate / stale-if-error, caches may serve stale responses while updating in the background. In that case, a large Age can be expected.

Whether “served stale” is a problem depends on your design tolerance and freshness requirements.

Debugging workflow (recommended)

  • Paste response headers into Response Headers Parser and check Age/Cache-Control/Date
  • Use this tool to read Age (and optionally Date) and observe increase/fixed/reset patterns
  • Check Vary Inspect for cache fragmentation (too many variants)

Troubleshooting checklist by symptom

  • Caching not working: Age always 0, Cache-Control private/no-store/no-cache, Vary: *, etc.
  • Updates not reflected: large Age, large s-maxage/max-age, immutable; check purge/bypass operations
  • Unstable CORS: if Origin varies dynamically, verify Vary: Origin to prevent mixing

How to test (curl)

Hit the same URL multiple times and observe Age changes to infer caching (replace the URL).

  • curl -I https://example.com/asset.js
  • Check Age/Cache-Control/Date and paste into this tool for clarity
  • Cache-Control Inspect
  • Expires Inspect
  • ETag Inspect / Last-Modified Inspect
  • Vary Inspect
  • Response Headers Parser

Recommendations (practical)

  • Age reflects CDN/proxy; interpret with Cache-Control
  • Check public/private for shared cache eligibility
  • Unexpected Age jumps may indicate intermediaries

What this tool does

  • Extract and display Age as seconds
  • Validate if Age is numeric
  • Extract Age/Date from full response headers
  • Estimate “stored-at” time from Age and Date

Operational notes

  • Cache behavior changes across browser, CDN, and proxy layers, so compare captures from the same observation point.
  • Header-only diagnosis may be insufficient. Also review application cache invalidation strategy and key design.

Referenced specs

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

FAQ

Is it a problem if Age is missing?

It’s not required. You may not be behind a shared cache or it may be hidden. Check Cache-Control and other caching signals too.

Does Age: 0 mean a cache hit?

Not necessarily. It can be newly cached, revalidated, or simply 0 at that moment. Observing over multiple requests is more reliable.

Why do I see Age exceeding max-age / s-maxage?

It may be allowed by stale-while-revalidate, influenced by revalidation (304), implementation differences, or you may be seeing a different cache layer. Check full Cache-Control and whether ETag/Last-Modified are present.

References

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

These links are generated from site_map rules in recommended diagnostic order.

  1. If-Modified-Since Inspect — Parse If-Modified-Since and inspect conditional retrieval
  2. Expires Inspect — Parse Expires and Date to inspect freshness behavior
  3. If-None-Match Inspect — Parse If-None-Match and inspect revalidation conditions
  4. Last-Modified Inspect — Parse Last-Modified and If-Modified-Since
  5. Cache Not Working Troubleshooting — Troubleshoot cache-not-working symptoms step by step from headers
  6. HTTP Cache Mismatch — Identify root causes of cache mismatches
  7. Cache Response Analyzer — Judge cacheability from response headers
  8. Cache Key Inspect — Visualize cache-key splits from URL, Vary, and headers

Cache Control

Diagnose delivery policy across Cache-Control/Expires/Age