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>
public
private
no-cache
only-if-cached
max-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-revalidate
proxy-revalidate
must-revalidate
, but it only applies to shared caches (e.g., proxies) and is ignored by a private cache.immutable
If-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-store
no-transform
no-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