我有一个简单的Node服务器,它将Cache-Control max-age设置为1200秒,并且客户端请求图像。即使没有经过1200秒,如果我从服务器更改图像并刷新页面,图像也会再次下载(即使经过1200秒也没有)。它应该从缓存中读取直到过期。
这里是响应头:
为什么会这样?
[当您告诉浏览器进行缓存时,响应头包含一个称为Last-Modified
的验证器。当重新加载浏览器时,对于GET或HEAD请求,可以将其包含在If-Modified-Since
请求中的服务器请求中。如果该项没有更改,这将导致服务器返回304
。
所以听起来好像事情正在按预期进行。您更改文件的事实导致服务器说“是的,此文件已更改,因此不应使用缓存。这是最新的文件”,因为Last-Modified
值不匹配。
[如果要避免这种情况并且即使文件发生更改也要依靠高速缓存超时,则可以更改服务器以确保这些文件的ETag
和Last-Modified
值永不更改。但是我建议让它以这种方式运行,并允许新文件更改在缓存中代替。
请参见this tutorial以获取更多详细信息。