防止 IE 缓存

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

我想到了两个解决方案:

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

我应该做哪一个?


答案 1

相反,请在有问题的页面上设置以下标题,这样您就不需要手动将其复制粘贴到所有页面上: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">

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


答案 2

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

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和缓存的最好的资源,如果你想了解更多的话。

话虽如此,根据您看到的问题,它可能是浏览器历史记录问题。有关这方面的更多信息,请参阅此处。


推荐