Tomcat ExpiresFilter无法正常工作

Yos*_*sef 5 tomcat tomcat7

我无法让Tomcat使用正确的expires定义发送图像.浏览器继续发送已下载图像的获取请求,Tomcat以304响应.我想要的是Tomcat将使用正确的expires头响应初始请求而没有任何Last-modified头,因此浏览器将使用本地缓存直到文件没有去每个页面加载的服务器过期,看看图像是否已更改.

我的web.xml文件中有以下定义:

<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 1 weeks</param-value>
    </init-param>
    <init-param>
        <param-name>ExpiresByType text/css</param-name>
        <param-value>modification plus 0 minutes</param-value>
    </init-param>
    <init-param>
        <param-name>ExpiresByType application/javascript</param-name>
        <param-value>modification plus 0 minutes</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>ExpiresFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping> 
Run Code Online (Sandbox Code Playgroud)

任何的想法?

小智 6

您是否可以按容器提供的过滤器> ExpiresFilter>故障排除中所述启用ExpiresFilter日志:

添加到$CATALINA_BASE/conf/logging.properties以下声明:

org.apache.catalina.filters.ExpiresFilter.level = FINE
Run Code Online (Sandbox Code Playgroud)

您将看到日志消息,如下所示:

添加了过期标头:

Mar 26, 2010 2:09:47 PM org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody
  FINE: Request "/tomcat.gif" with response status "200"
  content-type "image/gif", set expiration date 3/26/10 2:19 PM
Run Code Online (Sandbox Code Playgroud)

没有添加过期标头:

Mar 26, 2010 2:10:27 PM org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody
  FINE: Request "/docs/config/manager.html" with response status "200"
  content-type "text/html", no expiration configured
Run Code Online (Sandbox Code Playgroud)