我需要使用JavaScript重新加载一个页面,并确保它不从浏览器缓存中获取,而是从服务器重新加载页面。[因为页面元素在此期间可能已更改]
在IE和FF上,我发现以下代码可以正常工作;
window.location.reload(true);
然而它在Chrome或Safari上无效。
我尝试了以下方法,但也没有用;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
这个问题有解决方案吗?
研究结果
经过调查,我发现这个问题是HTTP协议处理引起的:
- Chrome发送带有
Pragma: no-cache
HTTP字段的请求。 - 服务器响应带有
Last-Modified: DATE1
字段的请求。 - JS使用
location.reload(true)
强制从服务器而不是缓存重新加载。 - Chrome发送一个带有
If-Modified-Since: DATE1
字段的请求。 - 服务器响应
HTTP状态304未修改
。
服务器应用程序没有注意到动态页面内容的状态更改,因此没有返回200
。但是,Chrome / WebKit是唯一在调用JS location.reload(true)
时发送If-Modified-Since
字段的浏览器。
我想把我的发现放在这里,以防其他人遇到同样的问题。