即使 Cache-Control 尚未过期,客户仍继续请求资产

Client keeps requesting assets event though Cache-Control havent expired

我有一个简单的节点服务器,它将 Cache-Control max-age 设置为 1200 秒,客户端请求图像。即使 1200 秒还没有过去,如果我从服务器更改图像并刷新页面,图像将再次下载(即使 1200 秒还没有过去)。它应该从缓存中读取直到它过期。

这是回复header:

为什么会这样?

当您告诉浏览器缓存时,响应 header 包含一个名为 Last-Modified 的验证器。当浏览器重新加载时,它可以在 GET 或 HEAD 请求的 If-Modified-Since 请求中将其包含在对服务器的请求中。如果项目没有更改,这将导致服务器 return 304

所以听起来一切都在按预期进行。您更改文件的事实导致服务器说 "yeah, this file was changed so the cache shouldn't be used. here's the latest one" 因为 Last-Modified 值不匹配。

如果您想避免这种情况并依赖缓存超时,即使文件发生更改,您也可以更改服务器以确保这些文件的 ETagLast-Modified 值永远不会更改.但我建议让它以这种方式运行,并允许新文件更改在缓存中占据一席之地。

有关详细信息,请参阅 this tutorial