HTTP Cache-Control Decoder

Paste any HTTP cache-related header (or several) and get a plain-English explanation. Decodes the directives, calls out common misconfigurations (no-cache vs no-store confusion, missing s-maxage on shared caches, contradictory directives), and shows the effective caching behavior across browsers, CDNs, and shared proxies.

How to use the HTTP Cache-Control Decoder

Paste raw HTTP headers (the kind you see in your browser's devtools Network panel response headers). The decoder picks out cache-related ones (Cache-Control, Expires, ETag, Last-Modified, Vary, Age, Pragma) and explains each directive. Misconfigurations are flagged with warning notices.

About HTTP Cache-Control Decoder

HTTP caching is the single most powerful performance lever in web development \xE2\x80\x94 a properly cached asset takes 0ms to load on subsequent views. The catch is that the rules are baroque. Cache-Control alone has 15+ possible directives, some of which contradict each other in subtle ways. no-cache doesn't mean "don't cache"; no-store does. private vs public affects shared proxies. must-revalidate changes how stale-cached responses behave. ETag and Last-Modified provide conditional GET, but only if your server actually returns 304 when they match.

This decoder is a sanity check. It tells you what your headers actually mean, flags configurations that confuse common caches (Cloudflare, Varnish, browsers, mobile network proxies), and explains the rules in human terms. Use it when reviewing your CDN config, debugging "why didn't this asset cache" mysteries, or learning HTTP caching for the first time.

Common use cases

  • CDN config review — sanity-check headers before publishing.
  • Cache miss debugging — figure out why your "1 year" cache isn't holding.
  • Mobile network optimisation — confirm headers tell mobile proxies the right thing.
  • Learning HTTP caching — see each directive explained against real values.

Frequently asked questions

What's the difference between no-cache and no-store?

no-store means the cache must not store the response. no-cache means the cache CAN store it but must revalidate (304-or-fresh) every time before serving. Despite the name, no-cache enables caching.

When does max-age vs s-maxage matter?

max-age applies to all caches; s-maxage overrides max-age for shared caches (CDNs, proxies) but not browsers. Useful when you want CDNs to cache longer than browsers.

Is Pragma still relevant?

Only for very old HTTP/1.0 clients. Modern caches ignore it when Cache-Control is present. Safe to remove from new configs.