---
title: "What is the Age header? Reading cache freshness from a response — warmup.rocks Glossary"
description: "The Age header tells you how long a response has been in cache, in seconds. Age: 0 means a fresh fetch; a large Age means a long-lived cached copy. How to read it alongside cache status headers."
canonical: https://warmup.rocks/glossary/age-header
---

# Age header

The **Age** header tells you how long a response has been sitting in a cache, in seconds. `age: 0` (or no Age header) usually means the response just came from the origin; `age: 8412` means you're looking at a copy cached 2 hours 20 minutes ago. It's the fastest single signal for "did this come from cache?"

## Reading it in practice

```
$ curl -sI https://example.com/ | grep -iE 'age|cache'
age: 8412
cache-control: public, max-age=60, s-maxage=86400
cf-cache-status: HIT
```

Cross-referencing Age with [Cache-Control](https://warmup.rocks/glossary/cache-control) tells you where in its life the copy is: here the object is 8,412 s into an 86,400 s [s-maxage](https://warmup.rocks/glossary/s-maxage) — about 10% through its edge lifetime. An Age just below the TTL means the next request may trigger revalidation or a miss.

## Nuances worth knowing

-   **Age is cumulative across cache layers.** In a [tiered setup](https://warmup.rocks/glossary/tiered-cache), Age reflects time since the origin fetch — not since the edge PoP stored its copy.
-   **Age says cached, not fresh-from-your-deploy.** After a release, a large Age on HTML tells you visitors still see the pre-deploy version — time to [purge](https://warmup.rocks/glossary/cache-purge) and re-warm.
-   **Each PoP has its own Age.** The same URL can show `age: 41000` in Frankfurt and `age: 0` in Sydney, because [every PoP caches independently](https://warmup.rocks/glossary/point-of-presence). One curl from your desk samples exactly one location — our [cache checker](https://warmup.rocks/cache-checker) reads Age and cache status from several regions at once.
-   **Age: 0 with a HIT** happens too: the copy was stored milliseconds ago (e.g. by another visitor — or by a warming pass).

## Related terms

Freshness lifetime comes from [TTL](https://warmup.rocks/glossary/ttl); what happens at expiry is shaped by [stale-while-revalidate](https://warmup.rocks/glossary/stale-while-revalidate); validation without re-download uses [ETags](https://warmup.rocks/glossary/etag).
