Apache模块 mod_expires
说明 | 允许通过配置文件控制Http的"Expires "和"Cache-Control "头内容 |
---|---|
状态 | 扩展(E) |
模块名 | expires_module |
源文件 | mod_expires.c |
概述
这个模块控制服务器应答时的Expires
头内容和Cache-Control
头的max-age
指令。有效期(expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。
这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。
要修改Cache-Control
头中max-age
(参见RFC 2616 section 14.9)项之外的内容,你还可以使用header
指令。
Alternate(交替/轮流) Interval(间隔) Syntax(语法)
ExpiresDefault
和ExpiresByType
指令同样能够用易懂的语法格式进行定义:
ExpiresDefault "<base> [plus] {<num>
<type>}*"
ExpiresByType type/encoding "<base> [plus]
{<num> <type>}*"
其中<base>是下列之一:
Access
-
now
(等价于'access
') modification
plus
关键字是可选的。<num>必须是整数[可以被atoi()
接受的],<type>是下列之一:
years
months
weeks
days
hours
minutes
seconds
例如,下列3个指令都表示文档默认的有效期是一个月:
ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
ExpiresDefault "access plus 30 days"
有效期可以通过增加"<num> <type>"子句进一步调整:
ExpiresByType text/HTML "access plus 1 month 15
days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3
minutes"
注意,如果你使用基于最后修改日期的设置,"Expires:"头将不会被添加到那些并非来自于磁盘文件的内容。这是因为这些内容并不存在"最后修改时间"的属性。
ExpiresActive 指令
说明 | 启用或禁用产生"Expires: "和"Cache-Control: "头的功能 |
---|---|
语法 | ExpiresActive On|Off |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | Indexes |
状态 | 扩展(E) |
模块 | mod_expires |
这个指令对其作用范围内的文档启用或禁用产生Expires
和Cache-Control
头的功能。若设置为 Off
则不会为其作用范围内的任何文档生成Expires
和Cache-Control
头(除非被更低一层的规则改写,比如.htaccess
文件)。若设置为 On
则会按照ExpiresByType
和ExpiresDefault
指令定义的标准为其作用范围内的文档生成Expires
和Cache-Control
头。
注意,这个指令并不保证Expires
或Cache-Control
头一定会产生。如果定义的标准不规范,将不会产生这两个头,其效果是好像从未设置过这个指令一样。
ExpiresByType 指令
说明 | 由mime类型配置的Expires 头的值 |
---|---|
语法 | ExpiresByType MIME-type <code>seconds |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | Indexes |
状态 | 扩展(E) |
模块 | mod_expires |
这个指令定义了为指定MIME类型的文档(如text/html
)生成的Expires
头的值和Cache-Control
头的max-age
指令。seconds参数设置了添加到基准时间以构造有效期限的秒数。Cache-Control: max-age
的计算方法是从有效期减去当前请求时间并转化为秒数。
基准时刻可以是源文件的最后修改时刻或者客户端对源文件的访问时刻,至于使用那一个则由<code>
指定。"M
"表示源文件的最后修改时刻,"A
"表示客户端对源文件的访问时刻。需要注意的是<code>
和seconds
之间没有空格。
这两种基准的差别是很微妙的。如果使用"M
",所有当前缓存中的文档副本都将在同一时刻过期,这个可能对定期更新的URL(比如位于同一位置的每周通告)很有好处。如果使用"A
",则每个客户端所得到的有效期是不一样的,这个可能对那些几乎不更新的图片文件很有好处,特别是对于一组都引用了相同图片的相关文档。
示例:
# 启用有效期控制
ExpiresActive On
# GIF有效期为1个月
ExpiresByType image/gif A2592000
# HTML文档的有效期是最后修改时刻后的一星期
ExpiresByType text/html M604800
注意,这个指令只有在"ExpiresActive On
"的条件下才有效。它只对指定的MIME类型文档改写由ExpiresDefault
指令设置的有效期。
你也可以使用前面讲述的alternate syntax指定有效期的计算方法。
ExpiresDefault 指令
说明 | 默认有效期的计算方法 |
---|---|
语法 | ExpiresDefault <code>seconds |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | Indexes |
状态 | 扩展(E) |
模块 | mod_expires |
该指令设置了其作用范围内的所有文档的默认有效期的计算方法,它可以被ExpiresByType
指令基于MIME类型被改写。详情请参见ExpiresByType
指令和那个alternate syntax的描述。