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

时间:2019-09-24 14:01:57

标签: http http-headers browser-cache cache-control

是否可以在响应标头中设置max-stale以便客户端的请求使用它?这里的文档-Cache-Control: Syntax,特别是“缓存响应指令”部分使它看起来好像max-stale不是响应头的一部分。客户机是否仅使用此方法来决定它将使用过时资源多长时间,而服务器/应用程序中没有发言权?如果是这样,可以在响应中设置什么以模拟max-stale的功能?

2 个答案:

答案 0 :(得分:1)

在响应中不能使用最大失效时间。客户端可以使用它替代缓存默认值。 “即使在技术上已经超过有效期限,也要给我该资源”。如果客户端和原始服务器之间有一个缓存服务器,则将使用它。

说实话,根据我的经验,请求缓存控制标头很少使用,除了在使用开发工具进行“硬重载”时强制将刷新方式一直返回到原始服务器(max-age=0)之外。打开。据我所记得,我从未见过max-stale的真实实例。

响应头上没有等效项。如果服务器对资源的使用时间感到满意,则应该增加max-age的数量。

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

答案 1 :(得分:1)

模拟max-stale在响应中的行为并没有多大意义。服务器拥有资源,并且了解这些资源如何随时间变化。服务器必须确定资源的关键程度以及是否可以过时地保存它。还要为重新验证资源确定一些合理的时间限制,以使客户端在大多数时间获得新数据。这是服务器端的一种平衡行为。太严格的设置会使您的服务器超载请求,而给客户端增加网络流量。太宽松了,您的客户会看到旧的表示形式。

客户端可以使用max-stale来避免任何重新验证并获取缓存中的内容。除非确实必要,否则您不希望生成网络请求。例如must-revalidate会覆盖max-stale,因此即使响应中包含该标头,即使使用max-stale,您也将访问原始服务器。与no-cacheno-store类似。因此,从这个意义上说,服务器具有发言权。即使使用max-stale,它也可以标识无法使用的资源,并使用适当的标头进行标记。