ExpiresExpires is a caching header that specifies the absolute time at which a response becomes stale. Until that time, a cache may reuse the stored response without re-asking the server.
It is a legacy header from HTTP/1.0 and is now superseded by Cache-Control: max-age.
The value must be an HTTP-date in GMT. A malformed value or something like 0 is interpreted as a past time, treating the response as already expired — in fact Expires: 0 is an idiom for disabling caching.
When Cache-Control: max-age (relative seconds) is also present, Expires is ignored. max-age is measured from when the response was received, so it is less sensitive to client/server clock skew and is always preferred.
Because Expires is an absolute time, a wrong client clock throws off freshness. And since it is valid only up to the stated time — not from the moment it was cached — computing remaining freshness (freshness lifetime minus Age) when Age accrues across CDNs/proxies requires the Date header.
Expires: <HTTP-date>e.g. Expires: Wed, 21 Oct 2025 07:28:00 GMT