当前位置: 首页 > 知识库问答 >
问题:

无法为任何静态资源设置缓存控制标头(Spring)

越涵衍
2023-03-14

我试图设置缓存控制的任何静态资源(图像,js,css)在我的网站。我使用的是Spring4(带有Spring Security)和Tomcat8服务器。

我已经尝试在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>
<mvc:resources mapping="/resources/**" location="/resources/,classpath:/resources/" cache-period="2592000" />
<mvc:annotation-driven />
<http pattern="/resources/**" security="none"></http>

谢谢你。

共有1个答案

陶博赡
2023-03-14

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

当筛选器初始化后,在catalina日志中打印了以下日志:

使用配置expiresFilter[excludedResponseStatusCode=[304],default=null,bytype={text/css=expiresConfiguration[startingPoint=access_time,duration=[10分钟]],application/javascript=expiresConfiguration[startingPoint=access_time,duration=[10分钟]],image=expiresConfiguration[startingPoint=access_time,duration=[10分钟]]

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

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

org.apache.catalina.filters.expiresfilter onBeforeWriteResponseBody fine:请求“/static/img/home/phone_icon2.png”响应状态为“200”内容类型“image/png”,设置过期日期1/31/17 11:59 AM 2017年1月31日11:49:30 AM org.apache.catalina.filters.expiresfilter getExpirationDate fine:使用expiresconfiguration[startingpoint=access_time,duration=[10分钟]]匹配内容类型“image”返回1/31/17 11:59 AM/img/home/bgimage.png“响应状态”200“content-type”image/png“,设置过期日期1/31/17 11:59 AM 2017年1月31日11:49:30 AM org.apache.catalina.filters.expiresfilter getExpirationDate fine:使用expiresconfiguration[startingpoint=access_time,duration=[10分钟]]匹配”image“for content-type”image/png“返回1/31/17 11:59 AM

我建议您首先启用日志引用

 类似资料:
  • Glassfish 3.1.2,Mojarra 2.1.6,SSL已激活 也是一篇关于资源缓存的好文章。在我们的应用服务器中,SSL被激活。我们看到静态资源(图像、脚本、css)没有缓存。 下面是我的测试筛选器: 过期:确定。它是一个静态资源,不会改变,因此我们将到期日期设置在未来的一个月。 上次修改:不确定。我读到,将此设置为过去也会影响缓存 缓存控制:OK。允许安全缓存。安全影响? 此设置是否

  • 我想在缓存控制头中设置max age以响应。我已经写了如下,但仍然有max-age 0。我想只为一种方法设置max age,所以我不想禁用默认值。我认为应该是ovveride。 有人知道我做错了什么吗?

  • 我的Laravel应用程序正在为每个站点返回默认的

  • 为优化站点性能,静态资源应该带有恰当的'Cache-Control'值与其他必要的头。配置一个ResourceHttpRequestHandler处理器服务静态资源请求不仅会读取文件的元数据并填充'Last-Modified'头的值,正确配置时'Cache-Control'头也会被填充。【这段翻得还不是很清晰】 你可以设置ResourceHttpRequestHandler上的cachePerio

  • ETag标题的定义(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag): ETag HTTP响应头是资源的特定版本的标识符。它使缓存更有效,并节省带宽,因为如果内容没有改变,web服务器不需要发送完整的响应。另一方面,如果内容已经改变,etags有助于防止资源的同时更新互相覆盖(“空中冲突”)。 缓存控制头的定义(http

  • 我有一个问题与超文本传输协议头-缓存控制:max-age=1234我的源有那个头,但任何方式发送请求和接收304.我需要可能我错过了什么?还有一个,源除了缓存控制: max-age=1234在"响应头"有缓存控制: max-age=0在"请求头",可能是它的影响。 我的一个资源响应标题,示例: > 远程地址:10.6.237.13:443请求请求方式:GET状态码:304未修改