我有一个简单的节点服务器,它将 Cache-Control max-age 设置为 1200 秒,并且客户端请求图像。即使 1200 秒还没有过去,如果我从服务器更改图像并刷新页面,图像将再次下载(即使 1200 秒还没有过去)。它应该从缓存中读取直到过期。
这是响应标头:
为什么会这样?
我有一个简单的节点服务器,它将 Cache-Control max-age 设置为 1200 秒,并且客户端请求图像。即使 1200 秒还没有过去,如果我从服务器更改图像并刷新页面,图像将再次下载(即使 1200 秒还没有过去)。它应该从缓存中读取直到过期。
这是响应标头:
为什么会这样?
当您告诉浏览器进行缓存时,响应标头包含一个名为Last-Modified
. 当浏览器重新加载时,它可以在If-Modified-Since
对 GET 或 HEAD 请求的请求中将其包含在对服务器的请求中。304
如果项目没有更改,这将导致服务器返回。
所以听起来事情正在按预期进行。您更改文件的事实导致服务器说“是的,此文件已更改,因此不应使用缓存。这是最新的”,因为Last-Modified
值不匹配。
如果您想避免这种情况并依赖缓存超时,即使文件发生更改,您可以更改您的服务器以确保这些文件的ETag
和Last-Modified
值永远不会更改。但我建议让它以这种方式运行,并允许新的文件更改在缓存中占据它的位置。
有关更多详细信息,请参阅本教程。