我需要用 Javascript 重新加载页面。我window.location.reload
用于此目的。现在,我在 Chrome 中观察到一个奇怪的行为:Chrome 总是连接到服务器并询问文档是否被修改。虽然304 Not Modified
返回了 a ,但我仍然想避免往返服务器。
我也尝试过明确地使用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: *
因此,Cache-Control
和Expires
标头都已设置,应该告诉 chrome 不要在 24 小时内更新资源。
我没有使用 F5/CMD+R 重新加载页面,而是单击一个链接,该链接将具有一个 javascript 事件,该事件将更改window.location.hash
然后调用window.location.reload(false)
. 但是 Chrome 一直在Cache-Control: max-age=0
为请求设置标头 - 我不想要。Chrome 应该使用它的内部缓存,并且根本不向服务器发送任何内容。
相同的代码使用火狐没有问题,FF使用的是缓存版本,根本不连接服务器。
我怎样才能解决这个问题?
编辑:这是一个简单的示例,您可以自己试用:http ://webspace.markdown.io/reloadtest.html
编辑:我关闭了开发人员工具并通过tcpdump -s 1024 -l -A dst port 80
服务器验证标头。我还在开发人员工具中取消了“禁用浏览器缓存”。
编辑 2:请注意,如果关闭选项卡并将 URL 输入新的,Chrome 会正确使用缓存。仅单击一个链接(这将导致 awindow.location.reload
受到影响。