我有一个独立的 jetty 应用程序。过去,对 Jetty 的请求带有过期 header :
Expires: Thu, 01 Jan 1970 00:00:00 GMT
这是一个与我设置的不同的过期 header 。我不明白为什么会发生这种情况?我在 servlet 过滤器内按如下方式设置过期(以及其他 header ):
public class AuthorisationFilter implements Filter {
public void init (FilterConfig config) throws ServletException {
expires = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
expires.setTimeZone(TimeZone.getTimeZone("GMT"));
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// ....
if(url.endsWith(".eot") || url.endsWith(".ttf") || url.endsWith(".woff")) {
response.setHeader("Expires", expires.format(new Date(new Date().getTime()+(1000*86400))));
} else if(url.endsWith(".css") || url.endsWith(".pdf") || url.endsWith(".png") || url.endsWith(".gif") || url.endsWith(".jpg") || url.endsWith(".ico")) {
response.setHeader("Expires", expires.format(new Date(new Date().getTime()+(1000*500))));
} else {
response.setHeader("Expires", "Sat, 6 May 1995 1:00:00 GMT");
}
chain.doFilter(request, response);
}
我按如下方式注册 servlet 过滤器:
Server server = new Server(port);
ServletContextHandler context = new ServletContextHandler(server, "/", false, false);
FilterHolder f = new FilterHolder(new UrlFilter(jee));
context.addFilter(f, "/*", null);
f = new FilterHolder(new AuthorisationFilter(jee);
context.addFilter(f, "/*", null);
最佳答案
一些一般性建议。
在访问HttpServletResponse.getOutputStream()之前设置它或HttpServletResponse.getWriter()
设置日期 header (例如“过期”)时,请使用 HttpServletResponse.setDateHeader(String name, long date)
关于java - Jetty 更改/插入不同的 "Expires"http header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399517/