在线文档教程

Cache-Control

Cache-Control

Cache-Control通用头字段用于指定在两个,请求和响应的缓存机制的指令。缓存指令是单向的,这意味着请求中的给定指令并不意味着将在响应中给出相同的指令。

Header typeGeneral header
Forbidden header nameno
CORS-safelisted response-headeryes

语法

这些指令不区分大小写,并且有一个可选参数,可以同时使用令牌和带引号的字符串语法。多个指令用逗号分隔。

缓存请求指令

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: public Cache-Control: private Cache-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指示响应可能被任何缓存缓存。

Expiration

max-age=<seconds>指定资源被视为新鲜的最长时间。相反Expires,这个指令是相对于请求的时间而言的。

重新验证和重新加载

must-revalidate缓存必须在使用前验证陈旧资源的状态,不应使用过期资源。与之proxy-revalidate相同must-revalidate,但它仅适用于共享缓存(例如,代理)并被私有缓存忽略。

其他

no-store缓存不应该存储有关客户端请求或服务器响应的任何内容。

例子

防止缓存

要关闭缓存,您可以发送以下响应标题。另外,请参阅ExpiresPragma标题。

Cache-Control: no-cache, no-store, must-revalidate

缓存静态资产

对于应用程序中不会更改的文件,通常可以通过在下面发送响应标题来添加主动缓存。这包括由应用程序提供的静态文件,例如图像,CSS 文件和 JavaScript 文件。另外,请参阅Expires标题。

Cache-Control: public, max-age=31536000

规范

SpecificationTitle
RFC 7234Hypertext Transfer Protocol (HTTP/1.1): Caching
RFC 5861HTTP Cache-Control Extensions for Stale Content
draft-mcmanus-immutable-00HTTP Immutable Responses

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)
immutableNo1549.0NoNoNo1
stale-while-revalidateNo2NoNo3NoNoNo
stale-if-errorNo2NoNo3NoNoNo

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)
immutableNoNoNoNoNoNoNo
stale-while-revalidateNoNoNoNoNoNoNo
stale-if-errorNoNoNoNoNoNoNo