为什么chrome浏览器只在使用etag和上次修改日期时显示200(来自磁盘缓存(,而不在只设置etag响应标头时显示200?注意:生成etag是正确的。在我的情况下,我需要etag,上次修改的日期并不是真正需要
TL;博士
-
因为当没有基于
Last-Modified time
[1]的缓存控制或显式过期时间时,大多数浏览器都会分配启发式过期时间。 -
无法将
Cache-Control: must-revalidate
标头添加到缓存控制[2]的响应中。
[1]https://datatracker.ietf.org/doc/html/rfc7234#section-4.2.2
如果响应具有Last-Modified标头字段(
[RFC7232]的第2.2节(,则鼓励缓存使用启发式过期值这只不过是从那时起间隔时间的一小部分
此分数的典型设置可能为10%。
[2]https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#revalidation_and_reloading
TL;博士
新建MDN链接:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#up-到目前为止,内容始终
对于动态生成的内容,或者静态但经常更新的内容,您希望用户始终收到最新的版本。
如果因为响应不打算缓存而不添加"缓存控制"标头,则可能会导致意外结果。缓存存储可以启发式地缓存它——因此,如果您对缓存有任何要求,您应该始终在缓存控制标头中明确指出这些要求。
在响应中不添加缓存会导致服务器重新验证,因此每次都可以提供新的响应——或者,如果客户端已经有了新的响应,只需响应304 Not Modified。