我发现了一个让我很困惑的奇怪问题。我有一个 html 页面包含托管在 cdn 服务器上的图像 url,在第一次请求时(就在我上传图像之前),响应标头如下所示
180秒后,我清除浏览器缓存并再次请求,响应代码为200,看起来正常 但下一个请求(180秒后)看起来很困惑,响应代码是304 我的问题是,为什么浏览器认为缓存已过期,过期时间是否等于响应头“Date”加上“Cache-Control:max-age”?
为什么浏览器认为缓存过期了,过期时间是否等于响应头
加上Date
?Cache-Control: max-age
大约是这样。
RFC 9111 指定了如何计算响应的新鲜度。
在这种情况下,确定响应是否新鲜的计算是:
response_is_fresh = (freshness_lifetime > current_age)
保鲜期是
max_age
。 当前年龄大约是当前时间减去Date
(详细计算请参阅规范)。如果您查看“令人困惑”的回复的 Date
,您会清楚地看到该回复不再新鲜,因此需要重新验证。
您可能期待一个新的
Date
标头,因为您清除了缓存。但这不会影响 CDN,您可以从标头中看到 CDN 返回了 HIT
。因此,您仍然会看到缓存的响应,只是来自 CDN 而不是浏览器缓存的响应。