# Age Header — Syntax, Values & Examples

> 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`).

- Type: Response header
- Category: Caching
- Defined in: [RFC 9111 §5.1 — Age](https://www.rfc-editor.org/rfc/rfc9111.html#section-5.1)

## Syntax

```http
Age: <seconds>
```

## Examples

```http
Age: 120
```

cached two minutes ago

```http
Age: 0
```

just fetched from the origin

## Good to know

- Remaining freshness is roughly max-age minus Age — a response with `max-age=300` and `Age: 280` goes 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-status` and `x-vercel-cache` report HIT or MISS more directly.

## 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.

```sh
curl -sI https://example.com/ | grep -i '^age:'
```

## FAQ

### 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.

## Related headers

- [Cache-Control](https://www.devkult.com/headers/cache-control.md): Directives that tell browsers and CDNs whether, where and for how long a response may be cached.
- [Expires](https://www.devkult.com/headers/expires.md): The HTTP/1.0 way to say when a response goes stale. Cache-Control: max-age overrides it.
- [Vary](https://www.devkult.com/headers/vary.md): Lists the request headers that change the response, so caches keep a separate copy for each variant.

## Further reading

- [HTTP caching explained](https://www.devkult.com/blog/http-caching-explained.md)

Open the interactive page: https://www.devkult.com/headers/age