Also available in: Español · Português · Français · العربية
Cache-Control header: every directive, and what a CDN sees
Pick directives and get a header, or paste one and find out what it actually tells a browser and a shared cache.
What is the Cache-Control header?
Cache-Control is how a server tells caches what they may do with a response, and how a client tells them what it will accept. RFC 9111 defines seventeen directives for it: seven that belong on a request and ten that belong on a response. Four names appear on both sides — max-age, no-cache, no-store and no-transform — and mean different things depending on which way the message is travelling.
The distinction that matters most is not in the directive list at all. RFC 9111 separates a shared cache, meaning a CDN or a reverse proxy or anything serving more than one person, from a private cache, which is the browser's own. Seven of the seventeen directives name a shared cache in their definitions and only two name both kinds. IANA keeps a registry of these directives, and it records none of that — names and references and nothing about behaviour — so this page reads the specification's prose instead.
That is why a header can look thorough and still say nothing to your CDN. max-age speaks to any cache; s-maxage, public, private and proxy-revalidate are the ones that single out the shared one.
How to use it
- Choose the side. Response is the usual case — what your server sends. Request is what a browser or a client sends, and it has a different set of seven directives.
- Click directives or type the header directly. The buttons and the text field are the same thing; toggling a directive rewrites the field, and editing the field updates the buttons.
- Read the verdict, not just the string. You get told whether anything here reaches a shared cache, what is actually being forbidden, and which directives have problems — with the specification's own wording for each one below.
no-cache does not mean do not cache
This is the most consequential misreading in the whole header, and RFC 9111 settles it plainly. The response form of no-cache means the response "MUST NOT be used to satisfy any other request without forwarding it for validation". The response is still stored. It simply cannot be handed out again without checking with your server first, which is usually exactly what people want and not at all what they think they are asking for.
The directive that forbids storing is no-store: a cache "MUST NOT store any part of" the request or response. If you have sensitive data and you reached for no-cache, you reached for the wrong one. This page reports the two as separate findings rather than folding them together, and says so on the spot when a header has no-cache without no-store.
A related subtlety worth knowing: no-cache can take a field name as a value, and the two forms differ. Unqualified, it applies to the whole response. With a field name, it restricts only that header while the rest of the response may still be reused. Seven directives take a value at all, and only four of them require one — no-cache, private and max-stale each have a perfectly valid form with nothing after them.
What this page will not tell you
It will not tell you what your particular CDN does. Directives are what the specification says a conforming cache must and may do; every commercial CDN layers its own configuration, its own vendor directives and its own defaults on top, and several of them honour non-standard extensions this page does not know about. A directive marked as reaching a shared cache tells you the standard addresses it, not that your provider implements it the way you expect.
It also covers Cache-Control only. Freshness is decided by other headers too — Expires, Age, ETag and Last-Modified all take part, and a response with no Cache-Control at all can still be cached by heuristic. Checking one header is a necessary step and not a complete audit.
And it reports the specification's own words rather than advice. There is no recommended header here, because the right one depends on whether the resource is personalised, whether it is versioned in its URL, and how quickly you need a change to reach people. What the page can do is make sure the header you chose means what you think it does.
Why is it free?
The directive table is a few kilobytes travelling with the page, and the parsing happens in your own browser. Nothing you type is uploaded, nothing is logged, and there is no account to create.
No sign-up, no limits, and no watermark on anything you copy.