?
This document uses PHP Chinese website manual Release
說明 | 允許通過配置文件控制任意的HTTP請求和應(yīng)答頭信息 |
---|---|
狀態(tài) | 擴展(E) |
模塊名 | headers_module |
源文件 | mod_headers.c |
兼容性 |
RequestHeader 僅在 Apache 2.0 中有效 |
這個模塊提供了一些指令用于控制和修改HTTP請求頭和應(yīng)答頭。這些頭可以被合并、替換、刪除。
由mod_headers
提供的指令幾乎可以出現(xiàn)在配置文件的任何部分。并可以封裝在配置段中以限制其作用范圍。
指令的處理順序很重要,它取決于指令本身在配置文件中的位置和所屬配置段在配置文件中的位置。下面的指令如果顛倒一下順序?qū)?dǎo)致完全不同的結(jié)果:
RequestHeader append MirrorID "mirror 12"
RequestHeader unset MirrorID
當(dāng)前順序下,MirrorID
頭不會被設(shè)置。若顛倒一下順序,MirrorID
頭將被設(shè)為"mirror 12"。
mod_headers
可以應(yīng)用在請求被處理之前或之后。通常的模式是"后處理",也就是在請求處理完畢之后、發(fā)送應(yīng)答之前設(shè)置應(yīng)答頭。[原文:when Request Headers are set immediately before running the content generator and Response Headers just as the response is sent down the wire.]在實際工作的服務(wù)器上應(yīng)當(dāng)始終使用"后處理"模式。
"前處理"模式應(yīng)當(dāng)僅僅作為開發(fā)者使用的一種測試/調(diào)試輔助工具。可以在指令中使用early
關(guān)鍵字啟用"前處理"模式,此時將在處理請求之前設(shè)置請求頭。這樣就可以模擬各種不同的請求以協(xié)助調(diào)試。
由于"前處理"模式的指令在將URL映射到文件系統(tǒng)之前就生效了,不能依賴于所請求的路徑。所以"前處理"模式的指令只能用在主服務(wù)器和虛擬主機部分的配置中,而不能用于<Directory>
或<Location>
配置段中。
Header echo ^TS
MyHeader
頭來包含服務(wù)端接受到請求的時間戳和經(jīng)過多少時間以后才完成對該請求的處理并作出應(yīng)答。這個頭可以讓客戶端知道瓶頸位于服務(wù)端還是位于服務(wù)端和客戶端之間的線路。
Header add MyHeader "%D %t"
上面的設(shè)置將會添加如下應(yīng)答頭內(nèi)容:
MyHeader: D=3775428 t=991424704447256
Header add MyHeader "Hello Joe. It took %D microseconds \
for Apache to serve this request."
上面的設(shè)置將會添加如下應(yīng)答頭內(nèi)容:
MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
MyHeader
"頭。這個對根據(jù)特定的客戶端構(gòu)造特定的應(yīng)答頭很有用。注意,下面的例子需要mod_setenvif
模塊的支持。
SetEnvIf MyRequestHeader value HAVE_MyRequestHeader
Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
如果請求中出現(xiàn)"MyRequestHeader: value
"頭,應(yīng)答中將會包含下面的頭:
MyHeader: D=3775428 t=991424704447256 mytext
說明 | 配置HTTP應(yīng)答頭 |
---|---|
語法 | Header [condition] set|append|add|unset|echo header [value] [early|env=[!]variable] |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 擴展(E) |
模塊 | mod_headers |
這個指令可以替換、合并、刪除HTTP應(yīng)答頭。應(yīng)答頭緊跟在內(nèi)容處理器和輸出過濾器完工之后生成,這時候才能對頭進行修改。
condition選項可以是onsuccess
或always
。它決定了將對哪個內(nèi)部頭(internal header)表進行操作。onsuccess
表示"2xx
"狀態(tài)碼,always
表示所有狀態(tài)碼(包含"2xx
")。特別地,如果你想撤銷由某個模塊設(shè)置的頭,你應(yīng)當(dāng)做做試驗,以找到是那個表產(chǎn)生的影響。
該指令執(zhí)行的動作是由第二個參數(shù)決定的。這個參數(shù)取值范圍如下:
set
append
add
append
來代替它。unset
echo
這個參數(shù)后面必須要跟一個header名字(結(jié)尾的冒號可要可不要)。set
, append
, add
, unset
是大小寫無關(guān)的。用于echo
的header是大小寫敏感的,并且可以是一個正則表達式。
對于add
, append
, set
來說,value是第三個參數(shù)。如果value包含空格則必須用雙引號(")括起來。value可以是一個普通字符串或包含格式說明符的字符串,value支持下列格式字符串:
格式 | 描述 |
---|---|
%% |
百分號(%) |
%t |
接收到請求的微秒時間戳(相對于1970-1-1 00:00:00 UCT),外加一個"t= "前綴。 |
%D |
從接收到請求到完成對該請求的處理并作出應(yīng)答共花費了多少微秒,外加一個"D= "前綴。 |
%{FOOBAR}e |
環(huán)境變量FOOBAR 的內(nèi)容 |
%{FOOBAR}s |
SSL環(huán)境變量FOOBAR 的內(nèi)容(如果啟用了mod_ssl ) |
"%s
"格式符僅在Apache 2.1及以后的版本中可用。它可以代替"%e
"以避免"SSLOptions +StdEnvVars
"帶來的額外開銷。如果因為別的原因必須開啟"SSLOptions +StdEnvVars
",那么"%e
"將比"%s
"更加合適。
Header
后面可以跟一個用于指定生效條件的額外參數(shù)(或者用early
表示"前處理")。如果在"env=...
"參數(shù)中指定的環(huán)境變量存在(或用"env=!...
"表示不存在),那么Header
指令指定的動作將會生效,否則將不會生效。
除非使用early模式,否則Header
指令將在應(yīng)答最后被發(fā)送到網(wǎng)絡(luò)前處理。這意味著可以設(shè)置和改寫絕大多數(shù)應(yīng)答頭,除了自己添加的應(yīng)答頭。
說明 | 配置HTTP請求頭 |
---|---|
語法 | RequestHeader set|append|add|unset header [value] [early|env=[!]variable] |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 擴展(E) |
模塊 | mod_headers |
兼容性 | 僅在 Apache 2.0 中有效 |
這個指令可以替換、合并、刪除HTTP應(yīng)答頭。請求頭將會在內(nèi)容處理器運行之前被修改。修改的動作由第一個參數(shù)決定,其取值范圍如下:
set
append
add
append
來代替它。unset
這些參數(shù)后面必須要跟一個header名(結(jié)尾的冒號可要可不要,且大小寫無關(guān))。對于add
, append
, set
來說,value是第三個參數(shù)。如果value包含空格則必須用雙引號(")括起來。對于unset
來說則不需要value參數(shù)。value可以是一個普通字符串或包含格式說明符的字符串,格式字符串的用法與Header
指令一樣。
RequestHeader
后面可以跟一個用于指定生效條件的額外參數(shù)(或者用early
表示"前處理")。如果在"env=...
"參數(shù)中指定的環(huán)境變量存在(或用"env=!...
"表示不存在),那么RequestHeader
指令指定的動作將會生效,否則將不會生效。
除非使用early模式,否則RequestHeader
將在請求被處理之前生效。這樣,由瀏覽器和Apache輸入過濾器產(chǎn)生的請求頭都可以被該指令處理。