Advertisement

tomcat服务器缓存配置文件,Tomcat7服务器配置Cache-Control和Expires

阅读量:

先看一下YSlow对网页速度评测的结果分析和建议:

a886f5ea91267f8579fe974cdff253a6.png

根据评测结果显示,在前几位中分别采用了以下措施:添加Expire-Date头信息、减少HTTP请求次数、采用CDN服务以及使用无Cookie头域。除了上述提到的采用CDN的情况外,在其他更高层级的优化中,则主要通过减少HTTP访问频率并采用更为高效的缓存策略来实现。这些优化措施都与HTTP协议中的Cache-Control机制及Expire-Date(即Expires)头信息密切相关。

HTTP中头中的Cache-Control和Expires

先看看网站的现状:

b9aa6f721eb85278cd7c329da166cf8e.png

增添Expire头能够有效地降低Http请求次数;这一效果主要得益于浏览器缓存机制的作用以及资源未过期的前提条件;在实际应用中,在满足上述两个前提的情况下,系统能够充分利用缓存中的数据而不必频繁向服务器发送新数据;

增添Expire头能够有效地降低Http请求次数;这一效果主要得益于浏览器缓存机制的作用以及资源未过期的前提条件;在实际应用中,在满足上述两个前提的情况下,系统能够充分利用缓存中的数据而不必频繁向服务器发送新数据;

HTTP中 Expires 过期时间响应头信息

expires字段标识了到期日(即last-modified date),它是HTTP缓存机制的核心手段之一。该字段表明这一属性的作用在于表明文件的有效期限。一旦到达该截止日期后,则会触发缓存失效检测机制以确认文档是否发生更改;所有主流的Web服务器都支持这一字段;此外,在HTTP协议中,默认的时间格式为GMT而非本地时区。(例如)该字段的具体值通常是一个类似Fri, 30 Oct 1998 14:19:41的时间戳表示法表示)

尽管过期时间属性具有显著优势,在某些特定场景下仍存在一定的局限性:其中一项关键因素是涉及日期这一要素的存在。这意味着Web服务器与缓存服务器的时间必须保持一致;如果出现时差,则要么内容应当提前超出预期的过期时间(即提前过期),要么导致结果未能及时更新。

还有一个过期时间设置的问题也不容忽视:如果你将配置的过期时间设为固定值,并在返回内容时未同步更新下次到期的时间,则会导致所有后续的访问请求被发送到源Web服务器上;这不仅会增加服务器的负载压力和处理响应的速度。

HTTP中Cache-Control缓存控制响应头信息

Cache-Control(缓存控制)响应头字段信息有助于使网站管理员更加全面地掌控他们的内容,并且确定内容的有效期限。

在请求中使用Cache-Control 时,它可选的值有:

0adcb53b7642f6a3dcf989d20d08b692.png

在响应中使用Cache-Control 时,它可选的值有:

c744a5d45f05ba1200a70830e2633ae0.png

给静态资源(HTML文件,图片文件等)提供Response头中的Expires/Cache-Control Header是一种非常有效的策略。当HTTP响应包含Expires等Header时,浏览器会缓存该资源,理论上,在Expire Date之前,不会再向服务器发送请求获取该资源;不过,Expires字段只能指定一个固定日期,例如"Thursday, 27 November 2008 07:00:00 GMT",而不能像"从当前时间起10年"这样的不定值;为了达到这种效果,可以使用Cache-Control Header;如果一个HTTP响应包含了这样的Header:"Cache-Control: max-age = 100",这表示该静态文件在缓存中的最大保存期限为100秒;通常情况下,这种类型的文件应该永不过期;如果确实需要设置一个过期时间,我希望它能够达到——一万年,"Cache-Control: max-age = 315360000秒"

其实就应该给Expires设一个永远不会过期的时间。

假设现在有一个名为onekbit.js的JS文件需要使用时,在不覆盖现有文件的情况下新增JS脚本,并将其命名为onekbit_v2.js以便相关网站能够访问新的onekbit_v2.js这样做就能支持现有与新开发的网站并存显然没有必要为了节省存储空间而放弃原有版本。

Tomcat7上如何配置这些头信息

Tomcat7关于Expires的配置官方教程如下:

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

它是Java servlet API的一个组成部分, 主要负责管理response中的两个关键头字段: expires和cache-control中的max-age参数. 过期时间可设定为其对应源文件最后修改的时间或用户最近访问的时间. 这些expires和max-age参数告知浏览器如何管理缓存. 如果设置了缓存, 浏览器会在下次获取HTML内容时优先从本地缓存中获取, 除非超出了指定的有效期.

1、官方配置详情:

tomcat容器支持内置的过滤器来管理HTTP缓存。可以在指定路径下的特定配置文件中进行设置。

ExpiresFilter

org.apache.catalina.filters.ExpiresFilter

ExpiresByType image

access plus 10 days

ExpiresByType text/css

access plus 10 days

ExpiresByType application/javascript

access plus 10 days

ExpiresByType application/x-unknown-content-type

access plus 10 years

ExpiresByType image/x-icon

access plus 10 days

ExpiresByType image/gif

access plus 10 days

ExpiresFilter

/*

REQUEST

FOWARD

INCLUDE

ERROR

配置语法介绍:

ExpiresByType type

[plus] {}*

还有一种配置:

ExpiresDefault

access plus 1 month缓存到期时间设置为当前时间 加上 1个月

ExpireDefault表示多种MIME类型 包括 text/plain image/png application/javascript等其他常见的类型

param-name 中主要就是:

MIME类型的表示方法包括text/plain、image/png以及application/javascript等多种类型;在param-value中,参数base可设置为:

access 访问时间。

now (equivalent to 'access') 当前时间,相当于访问时间。

modification 文件的最后修改时间。

plus:值是可选的,可以不填,没什么意义。

num:必须是一个integer。type可以设置为:

years

months

weeks

days

hours

minutes

seconds

详细的可以参考tomcat官方英文文档

j2ee项目中的web-Inf/web.xml文件中进行部署并配置catalina.jar包及其相关依赖项

jar包详情:

org.apache.tomcat

tomcat-catalina

7.0.61

自己工程项目web.xml文件中配置内容如下:

ExpiresFilter

org.apache.catalina.filters.ExpiresFilter

ExpiresByType text/html

access plus 1 minutes

ExpiresByType image

access plus 10 years

ExpiresByType text/css

access plus 10 months

ExpiresByType application/javascript

access plus 10 months

ExpiresByType application/x-unknown-content-type

access plus 10 years

ExpiresFilter

/*

REQUEST

配置中的语法同方法1中相同

3、如果配置不起作用需要检查的点:

3.1、html页面是否有禁止缓存的meta;

//这一句设置文件的过期时间为0秒

//这一句设置文件禁止被缓存

3.2、实现代码中是否有限定的header头信息;

3.3、配置过程中发现在tomcat-7.0.56中有效在7.0.61版本中很多类型文件无效;

4、自己代码实现ExpiresFilter的方式:

下次再写

全部评论 (0)

还没有任何评论哟~