mod_expires

优质
小牛编辑
132浏览
2023-12-01
说明允许通过配置文件控制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(语法)

ExpiresDefaultExpiresByType指令同样能够用易懂的语法格式进行定义:

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

这个指令对其作用范围内的文档启用或禁用产生ExpiresCache-Control头的功能。若设置为 Off 则不会为其作用范围内的任何文档生成ExpiresCache-Control头(除非被更低一层的规则改写,比如.htaccess文件)。若设置为 On 则会按照ExpiresByTypeExpiresDefault指令定义的标准为其作用范围内的文档生成ExpiresCache-Control头。

注意,这个指令并不保证ExpiresCache-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的描述。