可以在响应header中设置max-stale吗?

Can max-stale be set in the response header?

是否可以在响应header中设置max-stale以供客户端请求使用?此处的文档 - Cache-Control: Syntax,特别是 "Cache response directives" 部分使其看起来好像 max-stale 不是响应 header 的一部分。这是否仅供客户端用来决定它将使用陈旧资源多长时间并且 server/application 没有发言权?如果是这样,可以在响应上设置什么来模拟 max-stale 的功能?

否 max-stale 不能在响应中使用。它旨在被客户端用来覆盖缓存默认值。 “给我这个资源,即使它在技术上有点过了它的有效期”。如果客户端和原始服务器之间存在缓存服务器,则会使用它。

老实说,根据我的经验,很少使用请求 cache-control header,除非强制刷新一直返回到原始服务器 (max-age=0),例如当在打开开发工具的情况下进行“硬重新加载”。据我所知,我从未见过 max-stale 的真实世界实例。

没有对应的回复header。如果服务器对资源使用时间感到满意,那么它应该增加 max-age 数量。

有一个 stale-while-revalidate 响应选项,允许在有限的时间内使用过时的资源,以允许快速重新加载页面,同时浏览器在后台检查并下载新版本下一次。但是,目前对它的支持有限,如您链接的页面底部所示。

模拟 max-stale 的响应行为并没有多大意义。服务器拥有资源并了解这些资源如何随时间变化。服务器必须决定资源的重要性以及它是否可以过时提供。还要为资源确定一些合理的时间限制 re-validated ,以便客户端在大多数时间都能获得最新数据。这是服务器端的平衡行为。设置太严格,您的服务器会因请求而超载,而客户端会因网络流量而超载。太松散,您的客户会看到旧的表示。

客户端可以使用 max-stale 来避免任何 re-validation 并获取缓存中的内容。除非确实有必要,否则您不想生成网络请求。例如 must-revalidate 覆盖 max-stale 所以如果响应有 header,即使 max-stale 无论如何你都会访问源服务器。与 no-cacheno-store 类似。所以从这个意义上说,服务器有发言权。它可以识别不能使用过时的资源,即使使用 max-stale 并使用适当的 header.

进行标记