如何防止Firefox中的后向缓存显示内容?

Ven*_*kat 10 firefox cache-control browser-cache

浏览器: Firefox 6.0

我使用以下设置进行页面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"/>
Run Code Online (Sandbox Code Playgroud)

我也迷上了事件pagehidepageshow.当我离开页面时,pagehide使用CORRECT值调用事件属性persisted = false(这是需要的:缓存中没有持久性!)

浏览了几页后,我window.history.go(-2);回到了A页.此时,我希望Firefox在服务器上轮询更新版本,而不是从缓存中显示.使用pageshow事件属性的CORRECT值调用页面A persisted = false(意味着页面未从缓存加载).但页面内容不是服务器数据; 它是陈旧的内容(与最初离开页面时相同)!Fiddler也没有向服务器显示新请求.

谷歌浏览器也表现出相同的行为.IE按预期工作(重新加载新数据)!

知道我错过了什么吗?

提前致谢!

Bor*_*sky 9

涉及多个缓存.有浏览器的文档缓存(bfache),浏览器的HTTP缓存,以及可能的中间HTTP缓存.

<meta>您在上面显示的标签在当前的Chrome或Firefox中完全没有效果.它们可能会在IE中产生影响.

很有可能,您的页面只是从浏览器的HTTP缓存中读取.

如果你真的想发送no-cache HTTP标头,你应该这样做.但它们需要是实际的HTTP头:正如我上面所说,<meta>标签"等价物"什么都不做.

而且,重要的是,任何其他中间缓存都不会解析您的HTML,因此如果您实际上没有发送正确的HTTP标头,则可能会缓存内容.

  • 谢谢!以下HTTP标头已经可用:`Cache-Control:no-cache Pragma:no-cache Expires:-1`不幸的是他们也没有帮助.回复后,我重新访问了标题,发现Firefox需要另一个标题来阻止缓存:http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching /`Cache-Control:no-cache,no-store`添加上面的标题后,它现在可以在IE,Firefox,Chrome和Safari中正常运行.只有Opera仍然通过缓存行为不端,但我会暂时推迟该问题. (6认同)

Ser*_*ure 5

如果您设置Cache-Control: "no-cache, no-store, must-revalidate"为 http 标头,则该页面将不会缓存在后向缓存中。

Firefox 也将事件上的事件处理程序beforeunload视为不在 BFC 中存储页面的信号,但 Safari 忽略此类处理程序,因此最好设置正确的 http 标头以指示页面内容的性质(可缓存或可变的)