HTTP Cache Header Analyzer
Interpret HTTP freshness, storage, revalidation, Vary, Age, validators, and cache-status signals from response headers.
Paste response headers from DevTools, curl, an API response, CDN logs, or a server header dump. The analyzer runs locally in your browser.
Options
Use this to debug browser caching, CDN behavior, stale content, revalidation, and inconsistent cache headers.
Output
HTTP cache analysis output will appear here.
Storage and freshness are separate cache decisions
Cache-Control: no-store forbids storage. no-cache is different: a response can be stored, but it must be successfully validated before reuse. private limits storage to private caches, while shared caches such as CDNs follow their own additional rules.
Freshness precedence matters
For a private cache, max-age takes precedence over Expires. For a shared cache, s-maxage takes precedence over max-age, which in turn takes precedence over Expires. An Expires value is most meaningful when a valid Date header is available to establish its lifetime.
Duplicate freshness directives are not harmless
Repeating max-age or s-maxage makes the freshness lifetime unreliable. The analyzer keeps duplicate Cache-Control field lines visible, flags the repeated directive, and does not present the duplicated freshness value as a reliable lifetime.
Validators do not create freshness
ETag and Last-Modified support conditional requests and revalidation. They do not by themselves say how long a response is fresh. Age tells how long a response has been resident since generation or validation; it is not a TTL.
Cache-Status and CDN headers need context
Cache-Status has a standardized syntax, while CF-Cache-Status, X-Cache, CDN-Cache-Status, and Surrogate-Control are implementation-specific. A MISS or BYPASS is not automatically an error; it has to be interpreted against the resource and the CDN configuration.
Standards behind the analysis
Core HTTP caching rules come from RFC 9111. Cache-Status is defined by RFC 9211, stale-while-revalidate and stale-if-error by RFC 5861, and immutable by RFC 8246.
