我怎么能阻止firefox缓存

时间:2011-06-24 11:57:47

标签: http jsp servlets portlet websphere-portal

我尝试了很多可能的解决方案,但我无法解决问题:

<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache-control" content="no-store">
<meta http-equiv="Cache-control" content="must-revalidate">
<meta http-equiv="pragma" content="no-cache"> 
<meta name="expires" content="0">

这些都不起作用。有人可以帮忙吗?我正在使用jsp / servlet。应用程序是websphere portal 6.1的一个portlet。

5 个答案:

答案 0 :(得分:1)

永远不要依赖HTML页面中的元标记来控制缓存。相反,您需要在响应中设置HTTP标头。在显示任何输出之前,在控制器中,您需要设置以下内容:

response.setHeader("Cache-Control", "max-age=0, must-revalidate");

这在过去对我有用,但如果不能解决这个问题,你也可以尝试以下方法

response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 1);

答案 1 :(得分:1)

元标题仅在从本地磁盘文件系统而不是HTTP请求页面时使用。您需要设置真实 HTTP响应标头。

创建一个基本上完成以下工作的filter

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse hsr = (HttpServletResponse) res;
    hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    hsr.setDateHeader("Expires", 0); // Proxies.
    chain.doFilter(req, res);
}

将其映射到例如*.jsp的URL模式,以使其在所有JSP页面上运行。

原始问题中的Cache-Control标题是正确的,no-storemust-revalidate必须no-cache。到目前为止发布的几乎所有其他答案基本上都是针对MSIE的。

另见:

答案 2 :(得分:0)

尝试在servlet的响应头中设置那些,如

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

答案 3 :(得分:0)

Firefox 3因其缓存问题而闻名

https://bugzilla.mozilla.org/buglist.cgi?quicksearch=Cache-control

我曾经实施过一个解决方案,每个页面都会添加一个随机ID,因此Firefox认为它是一个不同的页面。不太了解portlet,但你试过吗?

答案 4 :(得分:0)

我们与Liferay Portal Server有类似的问题。我们的解决方案是在资源链接(css / js)中添加一个时间戳,如

/mysite/css/menu.css?t=1291218768531

我们控制何时从应用程序中刷新时间戳,因此当我们强制浏览器重新加载资源时,我们可以控制。