gpt4 book ai didi

caching - JSF2 静态资源缓存

转载 作者:行者123 更新时间:2023-12-02 17:16:22 25 4
gpt4 key购买 nike

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);
}
  • 过期:好的。它是一种不会更改的静态资源,因此我们将到期日期设置为 future 一个月。
  • 最后修改时间:不确定。我读到将其设置为过去也会影响缓存
  • 缓存控制:好的。允许安全缓存。安全影响?

此设置有任何影响吗?我还阅读了很多应该通过过滤器禁用缓存的帖子。我看到的唯一问题是用户可能在新版本上遇到问题。样式和脚本可以在新版本中更改,但浏览器会忽略新版本并使用缓存中的文件。

最佳答案

您只需设置Cache-Control。默认情况下已设置 ExpiresLast-Modified ResourceHandler (并且会覆盖过滤器设置的值)。 Last-Modified 必须表示相关资源的最后修改时间戳。您可以通过servletContext.getResource(path).openConnection().getLastModified()获取它。但无论如何你都不需要在这里设置它。只需让 ResourceHandler 处理即可。

关于版本控制,正确使用资源库即可。您可以将与正则表达式模式 \d+(_\d+)* 匹配的版本文件夹放入库文件夹中,ResourceHandler 将提供最新版本。

例如

/resources/libraryname/1_0/js/file.js
/resources/libraryname/1_1/js/file.js
/resources/libraryname/1_2/js/file.js

下面将从 1_2 获取:

<h:outputScript library="libraryname" name="js/file.js" />

关于caching - JSF2 静态资源缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com