# 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>}*"
```
其中<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 指令
| [說明](#calibre_link-18) | 啟用或禁用產生"`Expires:`"和"`Cache-Control:`"頭的功能 |
| --- | --- |
| [語法](#calibre_link-19) | `ExpiresActive On|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 <code>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 <code>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)的描述。
- Apache HTTP Server Version 2.2 文檔 [最后更新:2006年3月21日]
- 版本說明
- 從1.3升級到2.0
- 從2.0升級到2.2
- Apache 2.2 新特性概述
- Apache 2.0 新特性概述
- The Apache License, Version 2.0
- 參考手冊
- 編譯與安裝
- 啟動Apache
- 停止和重啟
- 配置文件
- 配置段(容器)
- 緩沖指南
- 服務器全局配置
- 日志文件
- 從URL到文件系統的映射
- 安全方面的提示
- 動態共享對象(DSO)支持
- 內容協商
- 自定義錯誤響應
- 地址和端口的綁定(Binding)
- 多路處理模塊
- Apache的環境變量
- Apache處理器的使用
- 過濾器(Filter)
- suEXEC支持
- 性能方面的提示
- URL重寫指南
- Apache虛擬主機文檔
- 基于主機名的虛擬主機
- 基于IP地址的虛擬主機
- 大批量虛擬主機的動態配置
- 虛擬主機示例
- 深入研究虛擬主機的匹配
- 文件描述符限制
- 關于DNS和Apache
- 常見問題
- 經常問到的問題
- Apache的SSL/TLS加密
- SSL/TLS高強度加密:緒論
- SSL/TLS高強度加密:兼容性
- SSL/TLS高強度加密:如何...?
- SSL/TLS Strong Encryption: FAQ
- 如何.../指南
- 認證、授權、訪問控制
- CGI動態頁面
- 服務器端包含入門
- .htaccess文件
- 用戶網站目錄
- 針對特定平臺的說明
- 在Microsoft Windows中使用Apache
- 在Microsoft Windows上編譯Apache
- Using Apache With Novell NetWare
- Running a High-Performance Web Server on HPUX
- The Apache EBCDIC Port
- 服務器和支持程序
- httpd - Apache超文本傳輸協議服務器
- ab - Apache HTTP服務器性能測試工具
- apachectl - Apache HTTP服務器控制接口
- apxs - Apache 擴展工具
- configure - 配置源代碼樹
- dbmmanage - 管理DBM格式的用戶認證文件
- htcacheclean - 清理磁盤緩沖區
- htdbm - 操作DBM密碼數據庫
- htdigest - 管理用于摘要認證的用戶文件
- httxt2dbm - 生成RewriteMap指令使用的dbm文件
- htpasswd - 管理用于基本認證的用戶文件
- logresolve - 解析Apache日志中的IP地址為主機名
- rotatelogs - 滾動Apache日志的管道日志程序
- suexec - 在執行外部程序之前切換用戶
- 其他程序
- 雜項文檔
- 與Apache相關的標準
- Apache模塊
- 描述模塊的術語
- 描述指令的術語
- Apache核心(Core)特性
- Apache MPM 公共指令
- Apache MPM beos
- Apache MPM event
- Apache MPM netware
- Apache MPM os2
- Apache MPM prefork
- Apache MPM winnt
- Apache MPM worker
- Apache模塊 mod_actions
- Apache模塊 mod_alias
- Apache模塊 mod_asis
- Apache模塊 mod_auth_basic
- Apache模塊 mod_auth_digest
- Apache模塊 mod_authn_alias
- Apache模塊 mod_authn_anon
- Apache模塊 mod_authn_dbd
- Apache模塊 mod_authn_dbm
- Apache模塊 mod_authn_default
- Apache模塊 mod_authn_file
- Apache模塊 mod_authnz_ldap
- Apache模塊 mod_authz_dbm
- Apache模塊 mod_authz_default
- Apache模塊 mod_authz_groupfile
- Apache模塊 mod_authz_host
- Apache模塊 mod_authz_owner
- Apache模塊 mod_authz_user
- Apache模塊 mod_autoindex
- Apache模塊 mod_cache
- Apache模塊 mod_cern_meta
- Apache模塊 mod_cgi
- Apache模塊 mod_cgid
- Apache模塊 mod_charset_lite
- Apache模塊 mod_dav
- Apache模塊 mod_dav_fs
- Apache模塊 mod_dav_lock
- Apache模塊 mod_dbd
- Apache模塊 mod_deflate
- Apache模塊 mod_dir
- Apache模塊 mod_disk_cache
- Apache模塊 mod_dumpio
- Apache模塊 mod_echo
- Apache模塊 mod_env
- Apache模塊 mod_example
- Apache模塊 mod_expires
- Apache模塊 mod_ext_filter
- Apache模塊 mod_file_cache
- Apache模塊 mod_filter
- Apache模塊 mod_headers
- Apache模塊 mod_ident
- Apache模塊 mod_imagemap
- Apache模塊 mod_include
- Apache模塊 mod_info
- Apache模塊 mod_isapi
- Apache模塊 mod_ldap
- Apache模塊 mod_log_config
- Apache模塊 mod_log_forensic
- Apache模塊 mod_logio
- Apache模塊 mod_mem_cache
- Apache模塊 mod_mime
- Apache模塊 mod_mime_magic
- Apache模塊 mod_negotiation
- Apache模塊 mod_nw_ssl
- Apache模塊 mod_proxy
- Apache模塊 mod_proxy_ajp
- Apache模塊 mod_proxy_balancer
- Apache模塊 mod_proxy_connect
- Apache模塊 mod_proxy_ftp
- Apache模塊 mod_proxy_http
- Apache模塊 mod_rewrite
- Apache模塊 mod_setenvif
- Apache模塊 mod_so
- Apache模塊 mod_speling
- Apache模塊 mod_ssl
- Apache模塊 mod_status
- Apache模塊 mod_suexec
- Apache模塊 mod_unique_id
- Apache模塊 mod_userdir
- Apache模塊 mod_usertrack
- Apache模塊 mod_version
- Apache模塊 mod_vhost_alias
- Developer Documentation for Apache 2.0
- Apache 1.3 API notes
- Debugging Memory Allocation in APR
- Documenting Apache 2.0
- Apache 2.0 Hook Functions
- Converting Modules from Apache 1.3 to Apache 2.0
- Request Processing in Apache 2.0
- How filters work in Apache 2.0
- Apache 2.0 Thread Safety Issues
- 詞匯和索引
- 詞匯表
- 指令索引
- 指令速查
- 模塊索引
- 站點導航