gpt4 book ai didi

java - 无法为任何静态资源设置缓存控制 header (Spring)

转载 作者:行者123 更新时间:2023-11-28 23:22:18 26 4
gpt4 key购买 nike

我正在尝试为我网站中的任何静态资源(图像、js、css)设置缓存控制。我正在使用 Spring 4(带有 Spring Security)和 Tomcat 8 服务器。

我已经尝试在我的 web.xml 中设置 ExpiryFilter

<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType image</param-name>
<param-value>access plus 2 weeks</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 2 weeks</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/javascript</param-name>
<param-value>access plus 2 weeks</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>/resources/*</url-pattern>
</filter-mapping>

但由于 ExpiresFilter 不起作用,我尝试使用缓存周期设置 MVC 资源:

<mvc:resources mapping="/resources/**" location="/resources/,classpath:/resources/" cache-period="2592000" />
<mvc:annotation-driven />

但它也不起作用。

我还尝试检查我的 web.xml 中的过滤器映射是否有效,但事实证明它没有过滤任何图像/js/css 类型,但过滤了我的 html 文件。我的静态文件保存在 webapp/resources 文件夹中,无论我的 html 文件是否在 webapp/WEB-INF/jsp 文件中。

我还在我的 spring 安全配置中添加了这个:

<http pattern="/resources/**" security="none"></http>

有什么我想念的吗?

谢谢。

最佳答案

我在 tomcat 的 logging.properties 中通过 org.apache.catalina.filters.ExpiresFilter.level = FINE 启用了 tomcat 过滤器的日志记录。

当过滤器初始化后,catalina 日志中打印了以下日志:

使用配置 ExpiresFilter[excludedResponseStatusCode=[304], default=null, byType={text/css=ExpiresConfiguration[起点=访问时间,持续时间=[10 分钟]],应用程序/javascript=ExpiresConfiguration[起点=访问时间,持续时间=[10 分钟]], image=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]]}]

您可以看到所有状态为 304 的 http 响应都将被排除在设置缓存控制参数之外。

我配置了 tomcat 过滤器并缓存了我的资源。我可以通过过滤器日志确认这一点:

org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBodyFINE:请求“/static/img/home/phone_icon2.png”,响应状态为“200”,内容类型为“image/png”,设置截止日期为 1/31/17 11:59 AM2017 年 1 月 31 日上午 11:49:30 org.apache.catalina.filters.ExpiresFilter getExpirationDate很好:使用 ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]] 匹配内容类型“image/png”的“image”返回 1/31/17 11:59 AM2017 年 1 月 31 日上午 11:49:30 org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBodyFINE:请求“/static/img/home/bgimage.png”,响应状态为“200”,内容类型为“image/png”,设置截止日期为 1/31/17 11:59 AM2017 年 1 月 31 日上午 11:49:30 org.apache.catalina.filters.ExpiresFilter getExpirationDate很好:使用 ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]] 匹配内容类型“image/png”的“image”返回 1/31/17 11:59 AM

我建议您先启用日志记录 Reference

关于java - 无法为任何静态资源设置缓存控制 header (Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931502/

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