The Cache-Control general-header field is used to specify directives for caching mechanisms in both requests and responses. Caching directives are unidirectional, meaning that a given directive in a request is not implying that the same directive is to be given in the response.
| Header type | General header |
|---|---|
| Forbidden header name | no |
| CORS-safelisted response-header | yes |
The directives are case-insensitive and have an optional argument, that can use both token and quoted-string syntax. Multiple directives are comma-separated.
Standard Cache-Control directives that can be used by the client in an HTTP request.
Cache-Control: max-age=<seconds> Cache-Control: max-stale[=<seconds>] Cache-Control: min-fresh=<seconds> Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: only-if-cached
Standard Cache-Control directives that can be used by the server in an HTTP response.
Cache-Control: must-revalidate Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: public Cache-Control: private Cache-Control: proxy-revalidate Cache-Control: max-age=<seconds> Cache-Control: s-maxage=<seconds>
Cache-Control directivesExtension Cache-Control directives are not part of the core HTTP caching standards document. Be sure to check the compatibility table for their support.
Cache-Control: immutable Cache-Control: stale-while-revalidate=<seconds> Cache-Control: stale-if-error=<seconds>
publicprivateno-cacheonly-if-cachedmax-age=<seconds>Expires, this directive is relative to the time of the request.s-maxage=<seconds>max-age or the Expires header, but it only applies to shared caches (e.g., proxies) and is ignored by a private cache.max-stale[=<seconds>]min-fresh=<seconds>stale-while-revalidate=<seconds>
stale-if-error=<seconds>
must-revalidateproxy-revalidatemust-revalidate, but it only applies to shared caches (e.g., proxies) and is ignored by a private cache.immutableIf-None-Match or If-Modified-Since) to check for updates, even when the user explicitly refreshes the page. Clients that aren't aware of this extension must ignore them as per the HTTP specification. In Firefox, immutable is only honored on https:// transactions. For more information, see also this blog post.no-storeno-transformno-transform directive disallows this.To turn off caching, you can send the following response header. In addition, see also the Expires and Pragma headers.
Cache-Control: no-cache, no-store, must-revalidate
For the files in the application that will not change, you can usually add aggressive caching by sending the response header below. This includes static files that are served by the application such as images, CSS files and JavaScript files, for example. In addition, see also the Expires header.
Cache-Control: public, max-age=31536000
| Specification | Title |
|---|---|
| RFC 7234 | Hypertext Transfer Protocol (HTTP/1.1): Caching |
| RFC 5861 | HTTP Cache-Control Extensions for Stale Content |
| RFC 8246 | HTTP Immutable Responses |
| Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| Basic support | Yes | Yes | Yes | Yes | Yes | Yes |
immutable |
No | 15 | 49 | No | No | 11 |
stale-while-revalidate |
No1 | No | No2 | No | No | No |
| stale-if-error | No1 | No | No2 | No | No | No |
| Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
|---|---|---|---|---|---|---|---|
| Basic support | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
immutable |
No | No | No | No | No | No | 11 |
stale-while-revalidate |
No | No | No | No | No | No | No |
| stale-if-error | No | No | No | No | No | No | No |
1. See Chromium bug 348877.
2. See Bugzilla bug 995651.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control