我正在尝试设置一个不缓存静态资产 .css 和 .js 的项目。对于某些人来说,我们似乎遇到了一些内部缓存问题,我希望这能解决这个问题。
我有一个相位监听器,基本上是这个http://turbomanage.wordpress.com/2006/08/08/disable-browser-caching-in-jsf/的略微修改版本
我的课:
package com.ods.common.jsf.phaselistener;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletResponse;
public class CacheControlPhaseListener implements PhaseListener
{
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.setHeader("Cache-control", "no-cache"); // HTTP 1.1
response.setHeader("Cache-control", "no-store"); // HTTP 1.1
response.setHeader("Cache-control", "must-revalidate"); // HTTP 1.1
// response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setHeader("Allow", "GET"); // Allowing GET Method only
response.setHeader("Allow", "POST");// Allowing POST Method only
response.setDateHeader("Expires", -1); // prevent caching at the proxy server
/*what I've added*/
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-type", "x-javascript");
//below are the content types I'm seeing for the css/js assets via Firebug
response.setHeader("Content-type", "application/x-javascript");
response.setHeader("Content-type", "text/css");
}
}
我对 faces-config.xml 的补充:
<lifecycle>
<phase-listener id="nocache">com.ods.common.jsf.phaselistener.CacheControlPhaseListener</phase-listener>
</lifecycle>
我的 .xhtml 页面过去有一个 expires 标头:
Expires Thu, 01 Jan 1970 00:00:00 GMT
所以这似乎有点工作......我假设这个日期来自 Expires -1(将其设置为 unix 时代)。
如您所见,我尝试为一些 javascript 和 css 设置适当的内容类型标头,但这些资产的到期日期是未来一周。
有人有想法么?另外,我是前端开发人员,而不是后端 Java 人。我可以乱用 Java,但我绝对不是 Java 开发人员。这也是我在 JSF 的第一份工作,所以尽可能地低调一点就好:)