Glassfish 3.1.2,Mojarra 2.1.6,已启用SSL
我有一个关于静态资源缓存的问题。我读了一些文章,但不确定应该使用哪些选项。这篇
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);
}
- 过期时间:好的。这是一个静态资源,不会改变,因此我们将过期日期设置为一个月后。
- 最后修改时间:不确定。我读到过将其设置为过去时间对缓存也有影响。
- 缓存控制:好的。允许安全缓存。这会影响安全性吗?
这些设置会产生影响吗?我也看到过很多帖子建议通过过滤器禁用缓存。唯一的问题在于发布新版本时用户可能会遇到问题。样式和脚本在新版本中可能已更改,但浏览器忽略了新版本并使用缓存中的文件。