1

我见过:

如何在所有浏览器中控制网页缓存? 在此处输入链接描述

我在 JSF 1.2 页面中使用过:

<meta http-equiv="Cache-control" content="no-store, no-cache, must-revalidate"/>
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1"/>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>

它在 IE8 e Chrome 中不起作用!当我使用后退按钮时,它再次显示页面!怎么了?问候。

4

1 回答 1

3

这是如何在所有浏览器中控制网页缓存的引用?您在问题中链接但显然被忽略了:

请注意,当通过 HTTP 提供页面并且 HTTP 响应标头和 HTML 元标记中存在标头时,响应标头中指定的标头将优先于 HTML 元标记。HTML 元标记仅在从本地磁盘文件系统查看页面时使用。另见W3 HTML 规范第 5.2.2 章。当您不以编程方式指定它们时请注意这一点,因为网络服务器可以包含一些默认值。要验证一个和另一个,您可以使用 Firebug Net 面板查看/调试它们。

这显然是事实。您需要在真实的 HTTP 响应中设置这些标头,而不是在其 HTML 输出中。对于 JSF 1.x Web 应用程序,最好的方法是创建一个servlet 过滤器来执行任务。这是一个启动示例:

public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        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.
        chain.doFilter(req, res);
    }

    // ...
}

将其映射web.xml到感兴趣的 URL 模式,例如,*.jsfFacesServlet.

于 2012-05-18T18:29:08.530 回答