在 Jboss6 服务器中的 Spring JSF facelets 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 仍然显示以下内容,