【发布时间】:2022-01-18 22:23:09
【问题描述】:
在阅读了很多关于缓存验证器的信息后(阅读this answer on SO 后更深入地阅读),我有一个疑问,在任何地方都找不到答案。
我的用例是提供一个静态资产(一个 javascript 文件,即:https://example.com/myasset.js)以在其他网站中使用,因此搞乱他们的 Gpagespeed/gmetrix 分数最重要。
我还需要他们的用户在我每次部署新更改时收到我的静态资产的更新版本。
为此,我有以下响应标头:
Cache-Control: max-age=10800
etag: W/"4efa5de1947fe4ce90cf10992fa"
简而言之,我们可以看到以下关于浏览器如何使用etag 的流程
对于第一个请求,浏览器没有 If-None-Match Request Header 的值,因此服务器将返回状态码 200(Ok)、内容本身以及带有 ETag 值的响应头。
对于后续的请求,浏览器会以If-None-MatchRequest Header的形式添加之前收到的ETag值。这样,服务器可以将此值与来自 ETag 的当前值进行比较,如果两者都匹配,则服务器可以返回 304(未修改)告诉浏览器使用文件的最新版本,或者只是 200 后跟新内容以及相关的 ETag 值。
但是,我找不到任何有关使用 Cache-Control: max-age 标头的信息以及这将如何影响上述行为,例如:
-
之前
max-age的浏览器是否会请求新的更新?这意味着我可以定义一个更高的max-age值(pagespeed/gmetrix 会很高兴)并强制只使用etag指纹进行刷新。 - 如果不是,那么使用
etag并向网络添加额外的比特有什么好处?
【问题讨论】:
标签: http browser-cache cache-control etag