防止IE缓存

时间:2010-05-17 12:21:58

标签: java internet-explorer jsp struts browser-cache

我正在使用Struts开发Java EE Web应用程序。问题出在Internet Explorer缓存上。如果用户注销,他可以访问某些页面,因为它们被缓存并且没有请求。如果我点击刷新它工作正常。此外,如果用户再次进入登录页面,则不会重定向他,因为该页面也被缓存。

我想到了两个解决方案:

  1. 编写一个拦截器(类似servlet过滤器)以添加到响应头no-cache等。
  2. 或者在每个页面上添加<meta>个标记。
  3. 我应该做哪一个?

5 个答案:

答案 0 :(得分:29)

而是在相关页面的HttpServletResponse上设置以下标题,这样您就不需要在所有页面上手动复制它了:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

这相当于手动在页面中设置以下元标题:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

另见this answer。在测试之前不要忘记清除浏览器缓存;)

答案 1 :(得分:5)

我发现以下内容效果很好:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

从这个问题的标签看起来你正在使用Struts。 Struts 1.x允许您通过在nocache="true"元素上设置controller来完成struts-config.xml中的配置:

<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />

马克诺丁汉的caching tutorial是我在网上看到的关于HTTP和缓存的最佳资源,如果你想了解更多。

话虽如此,根据您遇到的问题,它可能是浏览器历史记录问题。有关详细信息,请参阅here

答案 2 :(得分:2)

看起来像IE&lt;即使你有编译指示,9仍将缓存:头部没有缓存,并设置浏览器在每个页面加载时刷新。在关闭html之前,您需要在第二个head部分中再次添加元标记。这是MS本身。

http://support.microsoft.com/kb/222064/

这里有更好的解释

http://www.htmlgoodies.com/beyond/reference/article.php/3472881/So-You-Dont-Want-To-Cache-Huh.htm

从测试开始,您还需要Expires:-1元标记才能使其正常工作。建议使用Expires:-1而不是0.

答案 3 :(得分:0)

将标签类型=“按钮”添加到实际操作按钮中。

type属性的默认值取决于当前文档兼容性模式。默认值为submit。在其他兼容模式下,默认值为按钮。 在表单中提交BUTTON元素时,该值取决于当前文档兼容性模式。 Windows Internet Explorer 8及更高版本。 type属性的默认值取决于当前文档兼容性模式。在IE8标准模式下,默认值为submit。在其他兼容模式和早期版本的Windows Internet Explorer中,默认值为button。 Internet Explorer 8及更高版本。在表单中提交BUTTON元素时,该值取决于当前文档兼容性模式。在IE8模式下,提交value属性。在其他文档模式和早期版本的Internet Explorer中,将提交innerText值。

http://msdn.microsoft.com/en-us/library/ie/ms535211(v=vs.85).aspx

答案 4 :(得分:-1)

使用no-cache等修改标题。这是通常的方法。