2012-04-28 5 views
3

Glassfish 3.1.2、Mojarra 2.1.6、SSL有効化JSF2静的リソースキャッシング

静的リソースのキャッシングに関する質問があります。私はこれについてのいくつかの記事を読んだが、私はどのオプションを使うべきかわからない。この

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); 
} 
  • が有効期限::

    は、ここに私の試験フィルターで[OK]をクリックします。これは変更されない静的リソースなので、有効期限を1カ月後に設定します。

  • 最終更新日:わからない私はこれを過去に設定することもキャッシングに影響を与えていることを読んでいる。
  • Cache-Control:Ok。安全なキャッシングを許可します。セキュリティの影響?

この設定には何らかの影響がありますか?また、フィルタを使用してキャッシングを無効にする必要がある多くの記事を読んでいます。私が見る唯一の問題は、ユーザーが新しいリリースで問題を抱える可能性があることです。スタイルとスクリプトは新しいリリースで変更できますが、ブラウザは新しいリリースを無視してキャッシュからファイルを使用します。

答えて

7

Cache-Controlのみ設定する必要があります。 ExpiresLast-Modifiedで、すでにに設定されており、デフォルトではResourceHandlerに設定されています(フィルタによって設定された値よりも優先されます)。 Last-Modifiedは、問題のリソースの最後に変更されたタイムスタンプを表す必要があります。 servletContext.getResource(path).openConnection().getLastModified()で入手できます。とにかくここに設定する必要はありません。ちょうどResourceHandlerを扱わせてください。

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

など。

<h:outputScript library="libraryname" name="js/file.js" /> 

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

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