浏览器: Firefox 6.0
我具有以下设置的Page A,以确保内容未存储在浏览器的bfcache中:
1) $(window).unload(function(){});
2)以下HTTP标头:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
<meta http-equiv="cache-control" content="no-cache"/>
我还联系了活动pagehide
和pageshow
。当我离开页面时,pagehide
将使用事件属性的CORRECT值调用persisted = false
(这是需要的:缓存中没有持久性!)
在浏览了两个页面之后,我必须window.history.go(-2);
返回页面A。至此,我希望Firefox轮询服务器以获取更新的版本,而不是从缓存中显示。使用pageshow
事件属性的CORRECT值调用页面A persisted = false
的页面(表示该页面未从缓存加载)。但是页面内容不是服务器数据;它是过时的内容(与最初离开页面时相同)!Fiddler也不向服务器显示新请求。
Google Chrome浏览器也表现出相同的行为。IE可以正常工作(重新加载新数据)!
知道我想念什么吗?
提前致谢!
涉及多个缓存。有浏览器的文档缓存(bfache),浏览器的HTTP缓存以及可能的中间HTTP缓存。
<meta>
您上面显示的标签在当前的Chrome或Firefox中绝对无效。它们可能在IE中起作用。
因此,可能只是从浏览器的HTTP缓存中读取您的页面。
如果您确实要发送无缓存HTTP标头,则应该这样做。但是它们必须是实际的HTTP标头:正如我上面所说的,<meta>
标记“等效”什么也没做。
而且,重要的是,任何其他中间缓存都不会解析HTML,因此如果您实际上没有发送正确的HTTP标头,则可能会缓存内容。
谢谢!以下HTTP标头已经可用:
Cache-Control: no-cache Pragma: no-cache Expires: -1
不幸的是,它们也没有帮助。在您回复后,我重新查看了标题,发现Firefox需要另一个标题来防止缓存:blog.httpwatch.com/2008/10/15/…Cache-Control: no-cache, no-store
添加上述标题之后,它现在在IE,Firefox,Chrome和Safari中都可以正常运行。只有Opera仍会因缓存而出现异常,但我将暂时推迟该问题。另一个注意事项:如果启用了SSL的站点,Firefox不会存储在bfcache中!我的生产系统是SSL,而开发系统不是。因此,生产系统可以在Firefox中正常运行,而无需像上面提到的任何其他HTTP标头!
这取决于您的HTTP标头。SSL +无缓存不会存储在bfcache中,但可缓存的SSL会存储。
正确!
no-cache
标头已经存在于我的情况下。“额外的HTTP标头”是指标no-store
头;如果使用SSL,则不需要!