Cache-Control头各个值的说明
cache-control的值比较复杂,下面参考RFC文档和MDN网站罗列出的结果。
请求头
max-age
客户端不接受age超出指定最大年龄的缓存,并且拒绝已失效的缓存记录,只有当max-stale参数被设置时才允许这样做。一般情况下,默认情况下客户端会拒绝超时的请求数据。
max-stale
当存在某个值时,客户端能够接受缓存的有效期不会超过指定的时间段;如果不存在该值,则即使缓存已失效长时间也不影响客户端的接受程度。
min-fresh
客户端能够接受未来时间段内新鲜度不低于当前时间加上指定时间的响应。具体而言,在指定后续时间段内有效的响应。始终有效
no-cache
客户端示意缓存,在使用缓存的时候必须进行校验。
没有值
no-store
客户端指示缓存机制,在处理本请求时不应保存应答内容。
而已经存在的数据不会受到影响。
也即缓存机制可基于已有的数据构建当前应答。
此处表述较为晦涩,请参考/rfc7234/中的相关段落以获取详细说明。
https://tools.ietf.org/html/rfc7234#section-5.2.1
Note: If a query containing this directive is fulfilled by a cache, the no-store directive does not apply to its previously cached response.https://tools.ietf.org/html/rfc7234#appendix-A
The 'no-store' request directive does not affect responses; i.e., a cache can fulfill such requests without invalidating them.
没有值
no-transform
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
禁止对资源进行任何形式的转换或重排。
此等HTTP头不得由代理更改。
例如,在某些情况下非透明代理可将图像格式转换为其他类型以节约缓存空间或减少上传至慢网络的数据量。
no-transform指令禁止此类操作。没有值
only-if-cached
客户端仅接受缓存提供的响应;若缓存未命中,则应返回504状态码。注:此处使用了中文翻译,在参考英文版本和RFC 7234标准后发现该描述存在明显错误,并已对此处进行修正,在MDN文档中已做出相应更改。
https://tools.ietf.org/html/rfc7234#section-5.2.1
Upon receiving this directive, a cache MUST either respond using its cached response that complies with the request's requirements, or send 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
当变量为null时,在公有缓存中无法实现数据持久化;即便默认设置为非持久化状态,在私有缓存中仍可实现数据持久化。
当存在非null值时,在公有缓存中对该键对应的无值操作进行限制。
proxy-revalidate
与must-revalidate相同,但仅对公共缓存生效。
没有值
max-age
在经过指定时间后将过期
有值
s-maxage
指定响应在公共缓存中的最大存活时间,它覆盖max-age和expires字段。
