我需要用 Javascript 重新加载页面。我用window.location.reload
为了这个目的。现在,我在 Chrome 中观察到一个奇怪的行为:Chrome 总是连接到服务器并询问文档是否被修改。虽然一个304 Not Modified
返回后,仍然存在我想避免的到服务器的往返。
我也尝试过明确使用window.location.reload(false)
告诉chrome使用缓存,但没有成功。并不是说我在重新加载的 URL 中有一个活动的哈希 (#) 片段。
资源的响应头如下:
HTTP/1.1 304 Not Modified
Server: nginx/1.2.2
Date: Sat, 01 Jun 2013 13:19:56 GMT
Last-Modified: Sat, 01 Jun 2013 13:04:55 GMT
Connection: keep-alive
Expires: Sun, 02 Jun 2013 13:19:56 GMT
Cache-Control: max-age=86400
Access-Control-Allow-Origin: *
So, the Cache-Control
和Expires
header 都已设置,并且应该告诉 chrome 不要在 24 小时内更新资源。
我不使用 F5/CMD+R 重新加载页面,而是单击一个链接,该链接将有一个将发生变化的 javascript 事件window.location.hash
然后打电话window.location.reload(false)
。但 Chrome 不断设置Cache-Control: max-age=0
请求的标头 - 我不想要它。 Chrome 应该使用它的内部缓存,并且根本不向服务器发送任何内容。
同样的代码使用Firefox没有问题,FF使用的是缓存版本,根本不需要连接服务器。
我怎样才能解决这个问题?
编辑:这是一个简单的示例,您可以用来自己尝试:http://webspace.markdown.io/reloadtest.html http://webspace.markdown.io/reloadtest.html
编辑:我关闭了开发人员工具并通过验证标头tcpdump -s 1024 -l -A dst port 80
在服务器上。我还在开发人员工具中取消选中“禁用浏览器缓存”。
编辑 2:请注意,如果关闭选项卡并将 URL 输入到新选项卡中,Chrome 会正确使用缓存。仅单击一个链接(这将导致window.location.reload
被影响。