Cache-Control
Cache-Control
通用头字段用于指定在两个,请求和响应的缓存机制的指令。缓存指令是单向的,这意味着请求中的给定指令并不意味着将在响应中给出相同的指令。
Header type | General header |
---|---|
Forbidden header name | no |
CORS-safelisted response-header | yes |
语法
这些指令不区分大小写,并且有一个可选参数,可以同时使用令牌和带引号的字符串语法。多个指令用逗号分隔。
缓存请求指令
Cache-Control
客户端可以在 HTTP 请求中使用的标准指令。
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
缓存响应指令
Cache-Control
服务器可以在 HTTP 响应中使用的标准指令。
Cache-Control: must-revalidate Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: publicCache-Control: privateCache-Control: proxy-revalidate Cache-Control: max-age=<seconds>Cache-Control: s-maxage=<seconds>
扩展Cache-Control
指令
扩展Cache-Control
指令不是核心 HTTP 缓存标准文档的一部分。请务必检查兼容性表格以获取支持。
Cache-Control: immutable Cache-Control: stale-while-revalidate=<seconds>Cache-Control: stale-if-error=<seconds>
指令
可缓存
public
指示响应可能被任何缓存缓存。
private
指示该响应是针对单个用户的,并且不能由共享缓存存储。私有缓存可以存储该响应。
no-cache
在释放缓存副本之前,强制高速缓存将请求提交给原始服务器进行验证。
only-if-cached
表示不检索新数据。客户端只希望获得缓存的响应,并且不应该联系原始服务器以查看是否存在新的副本。
Expiration
max-age=<seconds>
指定资源被视为新鲜的最长时间。相反Expires
,这个指令是相对于请求的时间而言的。
s-maxage=<seconds>
覆盖max-age
或Expires
标题,但它只适用于共享缓存(例如,代理)并被私有缓存忽略。
max-stale[=<seconds>]
表示客户愿意接受超过其到期时间的响应。或者,您可以以秒为单位指定一个值,指示响应不能过期的时间。
min-fresh=<seconds>
表示客户想要的响应至少在指定的秒数内仍然是新鲜的。
stale-while-revalidate=<seconds>
指示客户端愿意接受陈旧的响应,同时在后台异步检查新的响应。秒值指示客户愿意接受陈旧响应的时间。
stale-if-error=<seconds>
重新验证和重新加载
must-revalidate
缓存必须在使用前验证陈旧资源的状态,不应使用过期资源。与之proxy-revalidate
相同must-revalidate
,但它仅适用于共享缓存(例如,代理)并被私有缓存忽略。
immutable
表示响应主体不会随着时间而改变。资源如果未到期,则在服务器上保持不变,因此,即使用户明确刷新页面,客户端也不应为其发送条件重新验证(以检查更新。根据 HTTP 规范,不知道这个扩展的客户端必须忽略它们。在 Firefox 中,immutable
只有在交易中才有荣誉。
其他
no-store
缓存不应该存储有关客户端请求或服务器响应的任何内容。
no-transform
不应该对资源进行转换或转换。Content-Encoding ,Content-Range ,Content-Type 标头不得被代理修改。例如,一个不透明的代理可能会在图像格式之间进行转换,以节省缓存空间或减少慢速链接上的流量。该no-transform
指令不允许这样做。
例子
防止缓存
要关闭缓存,您可以发送以下响应标题。另外,请参阅Expires
和Pragma
标题。
Cache-Control: no-cache, no-store, must-revalidate
缓存静态资产
对于应用程序中不会更改的文件,通常可以通过在下面发送响应标题来添加主动缓存。这包括由应用程序提供的静态文件,例如图像,CSS 文件和 JavaScript 文件。另外,请参阅Expires
标题。
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 |
draft-mcmanus-immutable-00 | HTTP Immutable Responses |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
immutable | No | 15 | 49.0 | No | No | No1 |
stale-while-revalidate | No2 | No | No3 | No | No | No |
stale-if-error | No2 | No | No3 | No | No | No |
Feature | Android | 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 | No |
stale-while-revalidate | No | No | No | No | No | No | No |
stale-if-error | No | No | No | No | No | No | No |