Cache-Control头各个值的说明

cache-control的值比较复杂,下面参考RFC文档和MDN网站罗列出的结果。

请求头

max-age

客户端不愿意接受age超过这个值的缓存。并且不接受过期缓存,除非max-stale存在。
总是有值

max-stale

如果有值,客户端可以接受过期时间不超过指定值的缓存
如果没有值,客户端愿意接受过期缓存而无论过期过久。

min-fresh

客户端愿意接受一个新鲜度不小于当前age加上指定时间的响应。简单说在指定的后续一段时间内不会过期的响应。
总是有值

no-cache

客户端示意缓存,在使用缓存的时候必须进行校验。
没有值

no-store

客户端示意缓存,不要存储本次请求的响应。但是对于已经缓存的内容则没有影响。
也就说缓存可以从已缓存的数据中构造本次响应。这里难以理解,下面是rfc7234中关于这部分描述的片段的片段

https://tools.ietf.org/html/rfc7234#section-5.2.1
Note that if a request containing this directive is satisfied from a
cache, the no-store request directive does not apply to the already
stored response.

https://tools.ietf.org/html/rfc7234#appendix-A
The “no-store” request directive doesn’t apply to responses; i.e., a
cache can satisfy a request with no-store on it and does not
invalidate it.
没有值

no-transform

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。
没有值

only-if-cached

客户端只接受缓存给出的响应,如果缓存没有命中应该返回一个504
MDN的中文翻译在这里描述的是“如果缓存存在,…“,对比英文版以及RFC7234中的描述,这个描述是错误的,我已在MDN上进行修改

https://tools.ietf.org/html/rfc7234#section-5.2.1
If it receives this directive, a cache SHOULD either respond using a stored response that is
consistent with the other constraints of the request, or respond with
a 504 (Gateway Timeout) status code.

响应头

must-revalidate

一旦缓存过期,必须向源服务器进行校验,不得使用过期内容。如果无法连接必须返回504。
没有值

no-cache

如果值,在没有成功通过源站校验的情况下不得使用缓存。
有值,在进行验证的时候不要发送值指示的头域。
Cache-Control: no-cache="set-cookie,set-cookie2",表示不要携带cookie进行验证。
关于带有值的情况介绍较少,这里有一个讨论:no-cache头带值时

no-store

不要缓存当前请求的响应
没有值

no-transform

与请求头语义相同

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。
没有值

public

任何缓存都可以进行缓存,即使响应默认是不可缓存或仅私有缓存可存的情况。

private

没有值,公有缓存不可存储;即使默认是不可缓存的,私有缓存也可以存储
有值,将无值时的作用,限制到指定头字段上。公有有缓存不可存储指定的头字段,而其他字段可以缓存。

proxy-revalidate

与must-revalidate相同,但仅对公共缓存生效。
没有值

max-age

在经过指定时间后将过期
有值

s-maxage

指定响应在公共缓存中的最大存活时间,它覆盖max-age和expires字段。

你可能感兴趣的:(Cache-Control头各个值的说明)