Browser Cache Header Analyzer
Paste response headers and see whether a resource is fresh, revalidated, or never cached.
The Browser Cache Header Analyzer reads the response headers on a resource and tells you whether it is fresh, being revalidated, or never cached at all. Fresh means the browser served it from cache using the max age value, while revalidated means it asked the server for a conditional update and got back a not modified response. The tool points out which directive is blocking caching when a resource is not being stored, such as a no store flag or a set cookie header. Use it to tune performance, to confirm that your static assets are cached the way you intend, and to understand why a page keeps refetching the same file. Caching behaviour is decided almost entirely by response headers, and the difference between a fast site and one that refetches the same asset on every page is usually a single directive. A response with a maximum age is fresh, meaning the browser can reuse its stored copy without contacting the server at all, which is the ideal outcome for a static asset whose contents are identified by a version or a hash. A response that must be revalidated sends a conditional request, and if nothing changed the server replies that the resource is unmodified, which saves the transfer but still costs a round trip. The worst case is a response that is not stored at all, and the directives that cause it are worth knowing because they are easy to apply by accident: a no store flag, or a cookie being set on the response, both of which prevent caching entirely. Reading the headers on a real response and being told which case applies is how you confirm that your static assets are cached as intended and stop wondering why a page keeps asking for the same file.
Frequently Asked Questions
What does "fresh" vs "revalidated" mean?
A fresh response is served from cache without contacting the server (Cache-Control max-age). A revalidated one sends a conditional request (ETag/If-Modified-Since) and gets a 304 if unchanged.
Why is my resource never cached?
Common causes: Cache-Control: no-store, a Set-Cookie on the response, or a missing max-age. The analyzer flags which directive is blocking caching.
Should static assets use immutable caching?
Yes — pair Cache-Control: public, max-age=31536000, immutable on versioned filenames (app.4f3a.js) so the browser never revalidates them.