防止 IE 缓存

问题描述 投票:0回答:5

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

我想到了两种解决方案:

  1. 编写拦截器(类似 servlet 过滤器)以添加到响应标头无缓存等
  2. 或或在每页放置
    <meta>
    标签。

我应该做哪一项?

internet-explorer jakarta-ee browser-cache
5个回答
30
投票

而是在相关页面的

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">

另请参阅此答案。测试前不要忘记清除浏览器缓存;)


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 允许您通过在 struts-config.xml 中的配置来完成此操作,方法是在

nocache="true"
元素上设置
controller

<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />
如果您想了解更多信息,

Mark Nottingham 的 缓存教程 是我在网上看到的有关 HTTP 和缓存的最佳资源。

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


2
投票

看起来像 IE < 9 will still cache even if you have pragma: no-cache in the head and set browser to refresh on each page load. You need to add the meta tags again in a second head section before close of the html. This is right from MS itself.

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。


0
投票

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

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

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


-1
投票

用 no-cache 等修改 headers。这是通常的方法。

© www.soinside.com 2019 - 2024. All rights reserved.