Age
response headercaching
How many seconds a response has been sitting in a shared cache such as a CDN.
When a CDN or proxy serves a response from its cache, it adds Age: the number of seconds since the response was fetched or revalidated from the origin. No Age header, or Age: 0, usually means the response came straight from the origin. A cached response stays fresh while Age is below its max-age (or s-maxage).
Syntax
Age: <seconds>
Defined in RFC 9111 §5.1 — Age.
Examples
Age: 120
cached two minutes ago
Age: 0
just fetched from the origin
Good to know
- Remaining freshness is roughly max-age minus Age — a response with
max-age=300andAge: 280goes stale in 20 seconds. - Browsers count Age too, so content that sat on a CDN for a while expires sooner in the browser.
- CDN-specific headers such as
cf-cache-statusandx-vercel-cachereport HIT or MISS more directly.
Further reading: HTTP caching explained
Who sets Age
Caches add Age themselves; origin servers don't set it. Check it with curl -sI https://example.com/ | grep -i '^age:' — run it twice on a cached URL and watch it grow.
Check it
Fetch only the response headers and filter for Age. In the browser, it's under Response Headers in DevTools → Network.
curl -sI https://example.com/ | grep -i '^age:'
To compare response headers across many URLs at once, use the HTTP Status Checker.
Frequently asked questions
Why does a response with max-age=3600 go stale in my browser after a few minutes?
If it had already sat in a CDN cache for most of the hour, the Age header says so, and the browser subtracts it from max-age.