Cache-Control头各个值的说明

https://blog.csdn.net/alan19931103/article/details/78319422

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字段
--------------------- 
作者:93吸血鬼 
来源:CSDN 
原文:https://blog.csdn.net/alan19931103/article/details/78319422 
版权声明:本文为博主原创文章,转载请附上博文链接!

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务