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
Related tools
- 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
Next to view (diagnostic order)
These links are generated from site_map rules in recommended diagnostic order.
- If-Modified-Since Inspect — Parse If-Modified-Since and inspect conditional retrieval
- Expires Inspect — Parse Expires and Date to inspect freshness behavior
- If-None-Match Inspect — Parse If-None-Match and inspect revalidation conditions
- Last-Modified Inspect — Parse Last-Modified and If-Modified-Since
- Cache Not Working Troubleshooting — Troubleshoot cache-not-working symptoms step by step from headers
- HTTP Cache Mismatch — Identify root causes of cache mismatches
- Cache Response Analyzer — Judge cacheability from response headers
- Cache Key Inspect — Visualize cache-key splits from URL, Vary, and headers
Same-theme links
Cache Control
Diagnose delivery policy across Cache-Control/Expires/Age
- Cache Not Working Troubleshooting — Troubleshoot cache-not-working symptoms step by step from headers
- HTTP Cache Mismatch — Identify root causes of cache mismatches
- Cache Response Analyzer — Judge cacheability from response headers
- Cache Key Inspect — Visualize cache-key splits from URL, Vary, and headers
- Cache Diagnostic — Run cross-header diagnostics for HTTP caching
- Cache Control Overview — Summarize how to use Cache-Control/Pragma/Expires together
- Cache-Control Inspect — Parse and interpret Cache-Control directives
- Pragma Cache Inspect — Parse Pragma and inspect legacy cache control behavior
- Expires Inspect — Parse Expires and Date to inspect freshness behavior