# 指定缓存期限和认证的指令:
# s-maxage指令
ex : Cache-Control: s-maxage=604800 (单位 :秒)
s-maxage指令的功能和 max-age指令的相同,它们的不同点是 s-maxage 指令只适用于供多位用户使用的公共缓存服务器(②) 。也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。 --②:一般指代理。
另外,当使用 s-maxage 指令后,则直接忽略对 Expires 首部字段及 max-age 指令的处理。
# max-age 指令
ex: Cache-Control: max-age=604800 (单位:秒)
当客户端发送的请求中包含 max-age 指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。另外,当指定 max-age值为0,那么缓存服务器通常需要将请求转发给源服务器。
当服务器返回的响应中包含 max-age 指令时,缓存服务器将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间。
应用 HTTP/1.1版本的缓存服务器若遇到同时存在Expires首部字段的情况时,会优先处理 max-age 指令,而忽略掉 Expires 首部字段。而 HTTP/1.0 版本的缓存服务器的情况却相反, max-age 指令会被忽略掉。
# min-fresh 指令:
min-fresh指令要求缓存服务器返回至少还未过指定时间的缓存资源。比如,当指定 min-fresh 为 60 秒后,过了 60 秒的资源都无法作为响应返回了。
ex: Cache-Control: min-fresh=60 (单位:秒)
# max-stale 指令
使用 max-stale 可指示缓存资源,即使过期也照常接收。
如果指令未指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,那么即使过期,只要仍处于 max-stale 指定的时间内,仍旧会被客户端接收。
ex: Cache-Control: max-stale=3600 (单位:秒)
# only-if-cached 指令
使用 only-if-cached 指令表示客户端仅在 缓存服务器本地缓存目标资源的情况下才会要求其返回。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码 504 Gateway Timeout 。
ex: Cache-Control: only-if-cached
# must-revalidate 指令
使用此指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条504(Gateway Timeout)状态码。
另外,使用 must-revalidate指令会忽略请求的 max-stale指令(即使已经在首部使用了 max-stale ,也不会再有效果)。
ex: Cache-Control: must-revalidate
# proxy-revalidate 指令
proxy-revalidate指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。
ex: Cache-Control: proxy-revalidate
# no-transform 指令
指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。这样做可防止缓存或代理压缩图片等类似操作。
ex: Cache-Control: no-transform
本文详细介绍了HTTP缓存控制中的关键指令,包括s-maxage、max-age、min-fresh、max-stale、only-if-cached、must-revalidate、proxy-revalidate以及no-transform等,并解释了这些指令的作用和应用场景。

被折叠的 条评论
为什么被折叠?



