《HTTP 權威指南》筆記:第十六章&第十七章 國際化、內容協商與轉碼
《HTTP 權威指南》筆記:第十六章 國際化
客戶端通過在請求報文中的 Accept-Language 首部和 Accept-Charset 首部來告知服務器:“我理解這些語言.”
服務器通過 Content-type 首部中的 charset 參數和 Content-Language 來告知客戶端文件可用的字母表和語言.
兩者進行協商,得到最佳的結果.
MIME charset
術語
字符編碼方案:將二進制代碼轉化為字符代碼
字符集:將字符代碼轉換為字符
MIME 字符集:是將特定的編碼方案和特定的已編碼字符集組合而成.
常見的 MIME charset:
- us-ascii
- iso-8859-1
- utf-8
如果客戶端無法推斷出字符編碼,就假定使用的是 ios-8859-1.
類型
- 固定寬度
- 可變寬度+無模態:對不同的字符代碼采用不同數量的比特.
- 可變寬度+有模態:可以通過轉義處理相互有重疊的字符集
語言標記
定義:語言標記是命名口語的標準化字符串短語.
子標記定義:語言標記包括一個或多個部分,每個部分稱為一個子標記.
類型:
- 主子標記:第一個子標記,其值是標準化的;通常表示語言的類型.
- 可選子標記:第二個子標記,通常表示某一種語言所在的地區的方言
- 其他子標記都是未註冊的.·
應用:
在響應報文中的 Content-Language 這個 header 和請求報文中的 Accept-Language 中出現.
《HTTP 權威指南》筆記:第十七章 內容協商與轉碼
內容協商的目標是在保證一個 URL 的情況下,為客戶端提供不同的、最適合的頁面.
可以通過三種方法來進行內容協商:
- 客戶端驅動(存在多個 URL 的問題)
- 服務器驅動
- 透明協商
服務器驅動的協商
服務器通過對客戶端的請求報文進行解析,得到相關的信息,然後決定回應的報文主體,主要的方式有兩種:
- 通過內容協商首部
- 通過其他首部進行變通,例如 User-Agent 首部
內容協商首部——Accpet
內容協商首部是客戶端發向服務器的請求報文中的 Accept 首部,它包括:
- Accept
- Accept-Language
- Accept-Charset
- Accept-Encoding
透明協商
定義:透明協商是緩存代理在來代表服務器對客戶端進行協商的過程,其能夠減少服務器的負擔.
當緩存中的內容協商首部的值與請求中的協商首部的值不同的時候,需要從原始服務器中請求一份新的文檔.
Vary 首部
在緩存存儲來自服務器的文件時,在緩存中包含了 Vary 首部.
當第二次有不同的內容協商的請求報文的時候,能夠從服務器更新並儲存一個 alternate,另外一個名稱叫做 variant
內容轉碼
內容協商的機制中存在一個缺陷:服務器無法滿足客戶端的內容協商的要求,沒有能提供的相應的格式的文件.
這種情況下,可以通過內容轉碼來進行實現.
常見的類型有下面三種:
- 格式轉換:將 HTML 格式文件轉化為 WML 格式文件,便於無線的客戶端查看
- 信息綜合: 將小節標題生成文檔的大綱
- 內容註入:不減少內容,,例如自動廣告生成器和用戶追蹤系統
《HTTP 權威指南》筆記:第十六章&第十七章 國際化、內容協商與轉碼