Apache HTTP Server 2.4 版
說明 | 提供 內容協商 |
---|---|
狀態 | 基本 |
模組識別代號 | negotiation_module |
原始檔 | mod_negotiation.c |
內容協商,或更準確地說內容選取,在多個可用的文件之中,選取最符合客戶端功能的文件。有兩種執行方式。
Multiviews
Options
啟用,其中,伺服器執行內隱的檔名模式配對,而且從結果中選取。類型對應的格式與 RFC822 電子郵件標頭類似。它包含文件說明(以空白行分隔),而且由井字號 ('#') 開頭的行被視為註解。文件說明包含多個標題記錄;記錄如果在連續行開頭加入空格,則可以跨多行。開頭空格將會刪除,而且各行將會合併。標題記錄包含一個關鍵字名稱,通常以冒號結尾,後面接著一個值。標題名稱和值之間、以及值的標記之間,容許有空白。容許的標頭包括:
Content-Encoding
AddEncoding
指令定義的編碼。這通常包括 compress 壓縮檔的編碼 x-compress
,以及 gzip 壓縮檔的編碼 x-gzip
。編碼比對會忽略 x-
前綴。Content-Language
Content-Length
Content-Type
Level
QS
Content-Type: image/jpeg; qs=0.8
URI
Body
Body:----xyz----
<html>
<body>
<p>頁面內容。</p>
</body>
</html>
----xyz----
例如,考量一個稱為「document.html」的資源,它有英文、法文和德文可供使用。這些檔案分別稱為「document.html.en」、「document.html.fr」和「document.html.de」。類型對應檔案將會稱為「document.html.var」,並會包含以下內容:
URI: document.html
Content-language: en
Content-type: text/html
URI: document.html.en
Content-language: fr
Content-type: text/html
URI: document.html.fr
Content-language: de
Content-type: text/html
URI: document.html.de
所有這四個檔案都應該放置在同一個目錄中,且「.var」檔案應該與「type-map」處理常式搭配,並搭配有一個「AddHandler」指令碼。
AddHandler type-map .var
在這個目錄中,針對 document.html.var
的請求將選擇與使用者的 Accept-Language
請求標頭中所指定語言喜好最相符的變體。
如果啟用了 Multiviews
,且 MultiviewsMatch
設為「處理常式」或「任意」,針對 document.html
的請求將找出 document.html.var
,並繼續與明確的類型對應進行協商。
其他組態指令,例如 Alias
,可用於將 document.html
對應到 document.html.var
。
Multiviews
Options
將啟用 Multiviews 搜尋。如果伺服器收到 /some/dir/foo
而 /some/dir/foo
不存在,則伺服器將讀取目錄,尋找所有名為 foo.*
的檔案,並實際偽造一個類型對應,其中指定這些檔案,並指定與客戶端透過名稱要求時相同的媒體類型和內容編碼。接著選擇與客戶端需求最佳的相符項目,並傳回該文件。
MultiviewsMatch
指令組態 Apache 是否會考慮在選擇檔案時沒有指定內容協商資訊的檔案。
說明 | 允許代理伺服器快取內容協商文件 |
---|---|
語法 | CacheNegotiatedDocs 開啟|關閉 |
預設 | CacheNegotiatedDocs 關閉 |
內容 | 伺服器設定、虛擬主機 |
狀態 | 基本 |
模組 | mod_negotiation |
如果設定,此指令將允許代理伺服器快取內容協商文件。這表示位於這些代理伺服器後方的客戶端可以擷取與其能力不完全相符的文件版本,但會讓快取更有效率。
此指令僅套用於來自 HTTP/1.0 瀏覽器的請求。HTTP/1.1 提供更佳的協商文件快取控管,而此指令對於 HTTP/1.1 請求的回應並不具任何效果。
說明 | 如果找不到單一可接受文件時要執行的動作 |
---|---|
語法 | ForceLanguagePriority 無|偏好|備用 [偏好|備用] |
預設 | ForceLanguagePriority 偏好 |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 基本 |
模組 | mod_negotiation |
ForceLanguagePriority
指令使用指定的 LanguagePriority
來滿足協商,其中伺服器無法傳回單一相符文件的情況。
ForceLanguagePriority Prefer
使用 LanguagePriority
提供一個有效的結果,而不是在有數個同樣有效的選擇時傳回 HTTP 結果 300(多重選擇)。如果指定了下列指令,且使用者的 Accept-Language
標頭將 en
和 de
分別指定為品質 .500
(同樣可接受),則會提供第一組相符變異(en
)。
LanguagePriority en fr de ForceLanguagePriority Prefer
ForceLanguagePriority Fallback
使用 LanguagePriority
提供一個有效的結果,而不是傳回 HTTP 結果 406(不可接受)。如果指定了下列指令,且使用者的 Accept-Language
僅容許 es
語言回應,但找不到此類變異,則會提供 LanguagePriority
清單中第一組變異。
LanguagePriority en fr de ForceLanguagePriority Fallback
可以指定 Prefer
和 Fallback
兩種選項,因此,如果多於一種變異是可以接受的,則會提供 LanguagePriority
中的第一組相符變異,或者,如果沒有任何變異與客戶端可接受的語言清單相符,則會提供第一份可用的文件。
說明 | 當客戶端未表達喜好時,語言變異的優先順序 |
---|---|
語法 | LanguagePriority MIME-lang [MIME-lang] ... |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 基本 |
模組 | mod_negotiation |
LanguagePriority
設定語言變異的優先順序,用於在處理 Multiviews 要求時,客戶端未表達喜好時的情況。 MIME-lang 清單會依喜好遞減排序。
LanguagePriority en fr de
如果要求 foo.html
,同時存在 `foo.html.fr` 和 `foo.html.de`,但瀏覽器未表達語言喜好,則會傳回 `foo.html.fr`。
請注意,此指令只有在無法透過其他方式判斷「最佳」語言時,或者 ForceLanguagePriority
指令不為 None
時才會生效。一般來說,語言喜好是由客戶端決定,而非伺服器。