有没有办法关闭特定网站的客户端浏览器缓存?


10

这是一个与浏览器无关的问题,但我们正在使用IE9进行测试。

我们的用户访问的其中一个Web应用正在被随机缓存,并且在适当的时候没有显示更改。没有其他站点出现此问题,并且我们与供应商合作,后者声称对其他任何人都没有发生。如果我们使用开发人员工具栏并选择“从服务器强制刷新”,则所有内容都会正确更新。

除了真正解决问题外,我们的想法是通过为此特定站点禁用缓存来解决此问题。但是,我们不知道如何。

Answers:


10

禁用浏览器缓存的唯一正确方法是来自webapp本身的HTTP标头。仅HTTP 1.1“ Cache-Control”标头就可以满足任何2000年以后的浏览器的要求。但是,为了获得额外的保护,服务器可以同时发出HTTP 1.1“ Cache-Control”和HTTP 1.0“ Expires”标头

处理缓存无效的一种骇人听闻但有时也可以看到的方法是服务器中URL中的“ cachebuster”字符串。缓存无效化器通常基于时间戳,并作为查询字符串添加到每个HTML LINK,以使URL唯一,并且仅使用一次。有点像http://example.org/filename.html?cb=<timestamp+random_value>。这很丑陋,并且没有做任何HTTP标头做得更好的事情。但是它可以用作针对特定受众的黑客(Intranet上的FX),或与适当的HTTP标头一起用作附加保护层。

AFAIK无法 仅从 Internet Explorer中选择性地禁用单个站点的缓存。一种(复杂的解决方案)解决方案是将Varnish缓存安装为LAN上的中间缓存,将Internet Explorer设置为将Varnish用作HTTP代理,并在Varnish上使用VCL语言仅针对该特定站点重写HTTP标头。

老实说,我认为您的供应商在这里犯了一个错误。我建议安装IE的Fiddler2Firefox的Firebug,并查看webapp发送的实际HTTP标头。将其与我上面已经链接到的Mark Nottingham的缓存教程相关联-我猜测标头允许缓存,或者至少不表现性地禁止缓存。



0

如果您不能修改所讨论的网站的内容,则可以使用代理服务器来修改到浏览器的内容。这将允许您更改到期标头。


0

如果该网站允许您通过HTTPS连接,则可以根据您的浏览器禁用对加密页面的缓存。

在IE中,可以这样完成:

您可以在Internet选项->高级->安全->不将加密页面保存到磁盘中再次检查IE的设置。


他要求提供与浏览器无关的解决方案。
Mircea Vutcovici 2011年

1
@Mircea这与浏览器无关的解决方案。我只是提供了一个使用IE的免费示例。许多其他浏览器的确提供了禁用缓存SSL的选项,但设置位于不同的位置。
JeffG

0
<meta http-equiv="PRAGMA" content="NO-CACHE">

http://www.zann-marketing.com/developer/20051018/stop-browser-caching-using-meta-tags.html

您可能希望考虑使用URL栏中的随机键,这也将防止在浏览器中进行缓存。


如果GollyJer能够修改该网站,则可以使用。我知道他不是基于他的问题。
JeffG

准确地说,“随机密钥”不能有效地防止缓存。浏览器和中间缓存仍然可以将响应存储在磁盘上。但是,下次请求相同文件时,随机密钥将使URL不同,因此将不使用磁盘上的缓存版本。新的表示形式将从服务器下载,并可能缓存到磁盘。此外,META PRAGMA标记较旧,不应使用-建议使用HTTP Expires和Cache-Control标头。
Jesper M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.