3

Glassfish 3.1.2、Mojarra 2.1.6、SSL 有効化

静的リソース キャッシングについて質問があります。これに関するいくつかの記事を読みましたが、どのオプションを使用すればよいかわかりません。これ

https://developers.google.com/speed/docs/best-practices/caching

また、リソース キャッシングに関する優れた記事です。当社のアプリケーション サーバー内では、SSL がアクティブ化されています。静的リソース (画像、スクリプト、CSS) がキャッシュされていないことがわかります。

これが私のテストフィルターです:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        String uri = httpRequest.getRequestURI();
        if (GET_METHOD.equalsIgnoreCase(httpRequest.getMethod()) && uri.contains(ResourceHandler.RESOURCE_IDENTIFIER)) {
            httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 2419200000L); // 1 month in future.
            httpResponse.setDateHeader("Last-Modified", System.currentTimeMillis() - 2419200000L); // 1 month in past.
            httpResponse.setHeader("Cache-Control", "public"); // Secure caching
        }
    }
    chain.doFilter(request, response);
}
  • 有効期限: わかりました。変更されない静的リソースであるため、有効期限を 1 か月先に設定しています。
  • 最終更新日: わかりません。これを過去に設定すると、キャッシュにも影響があることを読みました
  • キャッシュ制御: わかりました。安全なキャッシュを許可します。セキュリティへの影響は?

この設定による影響はありますか? また、フィルターを介してキャッシュを無効にする必要がある投稿をたくさん読みました。私が目にする唯一の問題は、ユーザーが新しいリリースで問題を起こす可能性があるということです。スタイルとスクリプトは新しいリリースで変更できますが、ブラウザは新しいものを無視し、キャッシュからファイルを使用します。

4

1 に答える 1

7

設定するだけですCache-Control。およびはデフォルトExpiresすでに設定されています(フィルターによって設定された値をオーバーライドします)。は、問題のリソースの最後に変更されたタイムスタンプを表す必要があります。で入手できます。ただし、とにかくここに設定する必要はありません。処理させてください。Last-ModifiedResourceHandlerLast-ModifiedservletContext.getResource(path).openConnection().getLastModified()ResourceHandler

バージョニングに関しては、リソースライブラリを正しく使用してください。\d+(_\d+)*ライブラリフォルダに正規表現パターンに一致するバージョンフォルダを置くことができResourceHandler、最新のものを提供します。

例えば

/resources/libraryname/1_0/js/file.js
/resources/libraryname/1_1/js/file.js
/resources/libraryname/1_2/js/file.js

次に、以下から1つを取得します1_2

<h:outputScript library="libraryname" name="js/file.js" />
于 2012-04-28T13:11:32.283 に答える