这是一个与浏览器无关的问题,但我们正在使用 IE9 进行测试。
我们的用户访问的其中一个 Web 应用程序被随机缓存,更改未按时显示。其他网站都没有这个问题,我们与供应商合作,他们声称其他人都没有遇到过这种情况。如果我们使用开发人员工具栏并选择“从服务器强制刷新”,一切都会正确更新。
我们的想法不是真正解决这个问题,而是通过禁用此特定网站的缓存来解决这个问题。但是,我们不知道该怎么做。
答案1
禁用浏览器缓存的唯一正确方法是通过 Web 应用程序本身的 HTTP 标头。HTTP 1.1 的“Cache-Control”标头本身就足以满足 2000 年以后浏览器的需求。但为了获得额外的保护,服务器可以同时发出HTTP 1.1“Cache-Control”和 HTTP 1.0“Expires”标头一起。
处理缓存失效的一种比较 hack 但有时会用到的方法是使用“cachebuster”字符串在服务器的 URL 中。缓存无效化通常基于时间戳,并作为查询字符串添加到每个 HTML LINK,以使 URL 唯一且仅使用一次。类似于http://example.org/filename.html?cb=<timestamp+random_value>
。这很丑陋,并且不会做任何 HTTP 标头无法做得更好的事情。但它可以用作有限受众的黑客攻击(Intranet 上的 fx),或与适当的 HTTP 标头一起用作额外的保护层。
据我所知,没有办法选择性地禁用缓存 仅适用于单个站点在 Internet Explorer 中。一个(非常复杂的)解决方案可能是安装Varnish缓存作为 LAN 上的中间缓存,将 Internet Explorer 设置为使用 Varnish 作为 HTTP 代理,并使用Varnish 上的 VCL 语言仅为该特定站点重写 HTTP 标头。
老实说,我认为您的供应商在这里犯了一个错误。我建议安装适用于 IE 的 Fiddler2, 或者Firefox 的 Firebug,并查看 Web 应用发送的实际 HTTP 标头。将其与Mark Nottingham 的缓存教程我已经链接到上面了——我猜测标题允许缓存,或者至少没有明确禁止缓存。
答案2
确保设置了正确的过期标头。如果将时间设置为过去,则不会缓存内容。检查 IS9 运行的工作站上的时间/日期。另请参阅:http://www.mnot.net/cache_docs/
答案3
如果您无法修改相关网站的内容,则可以使用代理服务器修改浏览器途中的内容。这样您就可以更改过期标头。
答案4
<meta http-equiv="PRAGMA" content="NO-CACHE">
http://www.zann-marketing.com/developer/20051018/stop-browser-caching-using-meta-tags.html
您可能希望考虑在 URL 栏中使用随机键,这也可以防止浏览器内缓存。