多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Apache模块 mod_expires | [说明](#calibre_link-11) | 允许通过配置文件控制HTTP的"`Expires`"和"`Cache-Control`"头内容 | | --- | --- | | [状态](#calibre_link-12) | 扩展(E) | | [模块名](#calibre_link-13) | expires_module | | [源文件](#calibre_link-14) | mod_expires.c | ### 概述 这个模块控制服务器应答时的`Expires`头内容和`Cache-Control`头的`max-age`指令。有效期(expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。 这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。 要修改`Cache-Control`头中`max-age`(参见[RFC 2616 section 14.9](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9))项之外的内容,你还可以使用`Header`指令。 ## Alternate(交替/轮流) Interval(间隔) Syntax(语法) `ExpiresDefault`和`ExpiresByType`指令同样能够用易懂的语法格式进行定义: ``` ExpiresDefault "<base> [plus] {<num> <type>}*" ExpiresByType type/encoding "<base> [plus] {<num> <type>}*" ``` 其中&lt;base&gt;是下列之一: * `access` * `now` (等价于'`access`') * `modification` `plus`关键字是可选的。&lt;num&gt;必须是整数[可以被`atoi()`接受的],&lt;type&gt;是下列之一: * `years` * `months` * `weeks` * `days` * `hours` * `minutes` * `seconds` 例如,下列3个指令都表示文档默认的有效期是一个月: ``` ExpiresDefault "access plus 1 month" ExpiresDefault "access plus 4 weeks" ExpiresDefault "access plus 30 days" ``` 有效期可以通过增加"&lt;num&gt; &lt;type&gt;"子句进一步调整: ``` ExpiresByType text/html "access plus 1 month 15 days 2 hours" ExpiresByType image/gif "modification plus 5 hours 3 minutes" ``` 注意,如果你使用基于最后修改日期的设置,"Expires:"头将**不会**被添加到那些并非来自于磁盘文件的内容。这是因为这些内容并不存在"最后修改时间"的属性。 ## ExpiresActive 指令 | [说明](#calibre_link-18) | 启用或禁用产生"`Expires:`"和"`Cache-Control:`"头的功能 | | --- | --- | | [语法](#calibre_link-19) | `ExpiresActive On&#124;Off` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | Indexes | | [状态](#calibre_link-21) | 扩展(E) | | [模块](#calibre_link-22) | mod_expires | 这个指令对其作用范围内的文档启用或禁用产生`Expires`和`Cache-Control`头的功能。若设置为 `Off` 则不会为其作用范围内的任何文档生成`Expires`和`Cache-Control`头(除非被更低一层的规则改写,比如`.htaccess`文件)。若设置为 `On` 则会按照`ExpiresByType`和`ExpiresDefault`指令定义的标准为其作用范围内的文档生成`Expires`和`Cache-Control`头。 注意,这个指令并不保证`Expires`或`Cache-Control`头一定会产生。如果定义的标准不规范,将不会产生这两个头,其效果是好像从未设置过这个指令一样。 ## ExpiresByType 指令 | [说明](#calibre_link-18) | 由MIME类型配置的`Expires`头的值 | | --- | --- | | [语法](#calibre_link-19) | `ExpiresByType MIME-type &lt;code&gt;seconds` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | Indexes | | [状态](#calibre_link-21) | 扩展(E) | | [模块](#calibre_link-22) | 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](#calibre_link-1051)指定有效期的计算方法。 ## ExpiresDefault 指令 | [说明](#calibre_link-18) | 默认有效期的计算方法 | | --- | --- | | [语法](#calibre_link-19) | `ExpiresDefault &lt;code&gt;seconds` | | [作用域](#calibre_link-20) | server config, virtual host, directory, .htaccess | | [覆盖项](#calibre_link-66) | Indexes | | [状态](#calibre_link-21) | 扩展(E) | | [模块](#calibre_link-22) | mod_expires | 该指令设置了其作用范围内的所有文档的默认有效期的计算方法,它可以被`ExpiresByType`指令基于MIME类型被改写。详情请参见`ExpiresByType`指令和那个[alternate syntax](#calibre_link-1051)的描述。