1

私は見た:

すべてのブラウザでWebページのキャッシュを制御するにはどうすればよいですか? ここにリンクの説明を入力してください

私はJSF1.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

これは、すべてのブラウザでWebページのキャッシュを制御する方法からの引用です。あなたはあなたの質問でリンクしましたが、明らかに見落とされていました:

ページがHTTP経由で提供され、ヘッダーがHTTP応答ヘッダーとHTMLメタタグの両方に存在する場合、応答ヘッダーで指定されたものがHTMLメタタグよりも優先されることに注意してください。HTMLメタタグは、ページがローカルディスクファイルシステムから表示される場合にのみ使用されます。W3HTML仕様の第5.2.2章も参照してください。プログラムで指定しない場合は、これに注意してください。Webサーバーにはデフォルト値を含めることができるためです。どちらかを確認するには、FirebugNetパネルを使用してそれらを表示/デバッグできます。

これは明らかに事実です。これらのヘッダーは、HTML出力ではなく、実際のHTTP応答に設定する必要があります。JSF 1.x Webアプリケーションの場合、最良の方法は、タスクを実行するためのサーブレットフィルターを作成することです。キックオフの例は次のとおりです。

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パターン、たとえば*.jsf、のサーブレット名にマップしますFacesServlet

于 2012-05-18T18:29:08.530 に答える