Jboss6サーバーのSpringJSFFacelets Webアプリケーションでは、セキュリティ上の理由から、特定のWebページがWebブラウザーによってキャッシュされないようにする必要があります。また、クロスブラウザとしても機能するはずです。FirefoxのYSlowプラグインでテストを実行したときに、以下の推奨事項を見つけました。
私のWebアプリケーションでは、キャッシュも無効にするようにPhaselistenerを設定しています。しかし、なぜこれらの結果がYSlowによって提供されるのか理解できませんでした。これらの静的コンポーネントに遠い将来の有効期限を設定してこの問題を解決し、このページのパフォーマンスも向上させる方法を知りたいです。
キャッシュ制御フェーズリスナー
public class CacheControlPhaseListener implements PhaseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
public void afterPhase(PhaseEvent event) {
}
public void beforePhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
HttpServletResponse response = (HttpServletResponse) facesContext
.getExternalContext().getResponse();
response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "must-revalidate");
response.addHeader("Expires", "Mon, 8 Aug 2006 10:00:00 GMT");
}
}
faceconfigで
<lifecycle>
<phase-listener id="nocache">com.company.jsf.listener.CacheControlPhaseListener</phase-listener>
</lifecycle>
httpヘッダー
将来の日付を追加した後も、YSlowは次のように表示します。