Tomcat中给静态资源添加缓存失效时间


Tomcat性能调优 通过ExpiresFilter设置资源缓存

官方文档

http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Expires_Filter

简介

ExpiresFilter是Java servlet API 当中的一部分,它负责控制设置response当中的响应头:Expires 和 Cache-Control的max-age,过期时间可以设置为相对于源文件的最后修改时间,或者浏览器的访问时间。

这些响应头指示浏览器控制资源的缓存,如果使用了缓存,那么浏览器在下一次获取资源的时候就会从本地缓存中获取,而不是访问实际的资源服务器,除非超过失效时间。

配置路径

tomcat的conf目录下的web.xml文件

例子

下面的例子针对所有的HTML IMAGE CSS JAVASCRIPT 输出进行控制,添加HTTP头设置客户端缓存。

<filter>
 <filter-name>ExpiresFilter</filter-name>
 <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
  <init-param>
    <param-name>ExpiresByType text/html</param-name>
    <param-value>access plus 5 minutes</param-value>
 </init-param>
 <init-param>
    <param-name>ExpiresByType image</param-name>
    <param-value>access plus 5 minutes</param-value>
 </init-param>
 <init-param>
    <param-name>ExpiresByType text/css</param-name>
    <param-value>access plus 5 minutes</param-value>
 </init-param>
 <init-param>
    <param-name>ExpiresByType application/javascript</param-name>
    <param-value>access plus 5 minutes</param-value>
 </init-param>
</filter>
...
<filter-mapping>
 <filter-name>ExpiresFilter</filter-name>
 <url-pattern>/*</url-pattern>
 <dispatcher>REQUEST</dispatcher>
</filter-mapping>

语法介绍

<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value><base> plus <num> <type></param-value>
</init-param>

<init-param>
 <param-name>ExpiresByType type</param-name>
 <param-value><base> plus <num> <type></param-value>
</init-param>

<init-param>
 <param-name>ExpiresByType type;encoding</param-name>
 <param-value><base> plus <num> <type></param-value>
</init-param>

base可以设置为:

  • access 访问时间。
  • now (equivalent to ‘access’) 当前时间,相当于访问时间。
  • modification 文件的最后修改时间。

num必须是一个integer。

type的值可以设置为:

  • years
  • months
  • weeks
  • days
  • hours
  • minutes
  • seconds

ExpiresDefault代表所有的MIME类型 比如 text/plain image/png application/javascript等等。
下面的例子设置所有的MIME类型的输出被客户端缓存一个月,即缓存过期时间为一个月。

<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value>access plus 1 month</param-value>
</init-param>

<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value>access plus 4 weeks</param-value>
</init-param>

<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value>access plus 30 days</param-value>
</init-param>

过期时间还可以使用子句进行调整,例如:

<init-param>
 <param-name>ExpiresByType text/html</param-name>
 <param-value>access plus 1 month 15 days 2 hours</param-value> 
 // 缓存到期时间设置为当前时间 加上 1个月 15天 2小时
</init-param>

<init-param>
 <param-name>ExpiresByType image/gif</param-name>
 <param-value>modification plus 5 hours 3   minutes</param-value> 
 // 缓存到期时间设置为文件的修改时间 加上 5小时 3分钟
</init-param>

什么样的情况response会被设置缓存头

1、根据ExpiresByType 指定的 Content-Type 或者 使用了ExpiresDefault

2、Expires或Cache-Control 这俩个响应头没有被定义情况过滤器才会设置,如果我们已经设置了该响应头,那么就不会再重复设置了。

3、response的status没有包含在ExpiresExcludedResponseStatusCodes这个属性的配置当中。

这个属性可以在web.xml当中配置过滤器当中配置,定义哪些状态吗不需要设置缓存头,默认304的时候就不会被设置。

猜你喜欢

转载自blog.csdn.net/weixin_44116302/article/details/104952929