Apache HTTP Server 版本2.2
說明 | 提供內(nèi)容協(xié)商支持 |
---|---|
狀態(tài) | 基本(B) |
模塊名 | negotiation_module |
源文件 | mod_negotiation.c |
內(nèi)容協(xié)商,更準確的說應(yīng)該是"內(nèi)容選擇",是從幾個有效文檔中選擇一個最匹配客戶端要求的文檔的過程。內(nèi)容協(xié)商有兩種實現(xiàn)方法。
type-map
處理器信息的文件)明確地列出各變種的文件名。Options
指令中的MultiViews
選項激活),即服務(wù)器執(zhí)行一個隱含的文件名模式匹配,并在結(jié)果中選擇。類型表的格式有點類似于RFC822郵件頭的格式。它包含以空行分格的文檔描述,以井號(#)打頭的行被當(dāng)作是注釋。一個文檔描述包含幾個頭記錄,以空格開始的行將被認為是前一行的延續(xù),這樣文檔描述記錄就可以包含多行。在處理處理多行記錄時,行與行被連接起來,打頭的空格會被刪除。一個頭記錄包含一個關(guān)鍵字名,并且總是在結(jié)尾的地方用一個冒號將它自己和緊跟其后的值分隔開。在頭名字與它的值之間以及取值的各個標記之間可以插入空格。頭可以是:
Content-Encoding:
AddEncoding
指令定義的編碼方式。它一般包含compress壓縮文件的x-compress
編碼和gzip文件的x-gzip
編碼。在編碼對照過程中,"x-
"前綴會被忽略。Content-Language:
en
表示英語。如果變體包含一種以上的語言,用逗號來分隔。Content-Length:
Content-Type:
name=value
"這樣的語法。參數(shù)包括:
level
text/html
來講,默認值是"2",其它的默認值為"0"。qs
qs
取值都是特定于某個資源的。
Content-Type: image/jpeg; qs=0.8
URI:
Body:
Body:----xyz----
<html>
<body>
<p>Content of the page.</p>
</body>
</html>
----xyz----
MultiViews查詢是由Options
指令的MultiViews
選項激活的。如果服務(wù)器接收了一個對/some/dir/foo
的請求,而/some/dir/foo
并不存在,則服務(wù)器會查找這個目錄下所有的 foo.*
文件,并有效地偽造一個說明這些 foo.*
文件的類型表,假定客戶可能請求的一個,把他們指定為這個類型的媒體類型及內(nèi)容編碼。最終選擇其中最符合客戶請求的文檔,返回給客戶。
MultiViewsMatch
指令指示Apache在選擇文件時是否考慮不包含內(nèi)容協(xié)商元信息的文件。
說明 | 允許經(jīng)過內(nèi)容協(xié)商的文檔被代理服務(wù)器緩存 |
---|---|
語法 | CacheNegotiatedDocs On|Off |
默認值 | CacheNegotiatedDocs Off |
作用域 | server config, virtual host |
狀態(tài) | 基本(B) |
模塊 | mod_negotiation |
兼容性 | 從2.0版本起,語法有了變化 |
如果設(shè)置為"On",則允許內(nèi)容協(xié)商文檔被代理服務(wù)器緩存。這可能意味著在代理服務(wù)器后面的客戶端得到的文檔并不是最符合他們情況的版本,但它能夠使緩存更有效。
本指令只對HTTP/1.0瀏覽器的請求有效。HTTP/1.1在對內(nèi)容協(xié)商文檔進行緩沖方面提供了更好的控制,本指令對于HTTP/1.1的應(yīng)答沒有效果。
在2.0版本以前,CacheNegotiatedDocs
指令不帶任何參數(shù);它會自己在目錄存在的情況下開啟。
說明 | 指定無法匹配單個文檔的情況下所采取的動作 |
---|---|
語法 | ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] |
默認值 | ForceLanguagePriority Prefer |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_negotiation |
兼容性 | 僅在 Apache 2.0.30 及以后的版本中可用 |
ForceLanguagePriority
指令使用LanguagePriority
指令的設(shè)置,在服務(wù)器無法返回單個匹配文檔的情況下,指定完成協(xié)商過程的方法。
ForceLanguagePriority Prefer
在有幾個等價選擇的情況下,使用LanguagePriority
的設(shè)定以提供一個有效的結(jié)果,而不是返回HTTP結(jié)果"300"(多重選擇)。如果給出了下述指令,并且用戶的Accept-Language
頭為en
和de
賦予了相同的品質(zhì)系數(shù)".500
"(相同的品質(zhì)系數(shù)是允許的),那么第一個匹配的變體:en
將被返回。
LanguagePriority en fr de
ForceLanguagePriority Prefer
ForceLanguagePriority Fallback
使用LanguagePriority
指令在無法找到合適結(jié)果的情況下,指定一個有效的結(jié)果,而不是返回HTTP結(jié)果"406"(不可接受)。如果給出了下述指令,并且用戶的Accept-Language
頭只允許es
的返回結(jié)果,在這個變體沒有找到的情況下,下述LanguagePriority
指令列表的第一個變體將被返回。
LanguagePriority en fr de
ForceLanguagePriority Fallback
Prefer
和Fallback
兩個選項可以同時指定,這樣在有一個以上有效變體的情況下,返回LanguagePriority
指令列表中第一個匹配的變體文檔,而在沒有變體能夠匹配客戶可接受的語言的情況下,返回第一個可用的變體文檔。
說明 | 在客戶端沒有指示語言偏好的情況下,語言變體的優(yōu)先級列表 |
---|---|
語法 | LanguagePriority MIME-lang [MIME-lang] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項 | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_negotiation |
在處理MultiViews請求時,LanguagePriority
指令在客戶沒有指示語言偏愛的情況下,設(shè)定語言變體的優(yōu)先級列表。這個MIME-lang列表是按優(yōu)先級降序排列的。
LanguagePriority en fr de
表示對于foo.html
請求,如果foo.html.fr
和foo.html.de
同時存在,并且瀏覽器沒有表明對語言的偏愛,那么foo.html.fr
將被返回。
注意,本指令只在根據(jù)其它信息無法決定最好的語言或者ForceLanguagePriority
指令不是None
時才有效。對正確實現(xiàn)的HTTP/1.1請求,本指令沒有任何作用。