###### 實體首部字段 ######
實體首部字段是包含在請求報文和響應報文中的實體部分所使用的首部,用於補充內容的更新時間等與實體相關的信息。
# Allow #
ex : Allow: GET, HEAD
首部字段Allow用於通知客戶端能夠支持 Request-URI 指定資源的所有HTTP方法。
當服務器接收到不支持的HTTP方法時,會以狀態碼 405 Method Not Allowed 作爲響應返回。
與此同時,還會把所有能支持的HTTP方法寫入首部字段 Allow後返回。
# Content-Encoding #
ex: Content-Encoding: gzip
首部字段 Content-Encoding會告知客戶端服務器對實體的主體部分選用的內容編碼方式。
內容編碼是指在不丟失實體信息的前提下所進行的壓縮。
主要採用以下 4 種內容編碼的方式:
gzip
compress
deflate
identity
# Content-Language #
ex : Content-Language: zh-CN
首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言(指中文或英文等語言)。
# Content-Length #
ex : Content-Length: 15000
首部字段Content-Length表明了實體主體部分的大小(字節)。
對實體主體進行內容編碼傳輸時,不能再用 Content-Length 首部字段。(
實體主體大小的計算方法複雜,參考RFC2616的 4.4)
# Content-Location #
ex : Content-Location: http://www.hackr.jp/index-ja.html
首部字段Content-Location給出與報文主體部分相對應的URI。
和首部字段Location不同,Content-Location表示的是報文主體返回資源對應的URI。
如對於使用首部字段Accept-Language 的服務器驅動型請求,當返回的頁面內容與實際請求的對象不同
時,首部字段 Content-Location內會寫明 URI。(訪問http://www.hackr.jp/ 返回的對象卻是
http://www.hackr.jp/index-ja.html 等類似情況)
# Content-MD5 #
圖:客戶端會對接收的報文主體執行相同的 MD5 算法,然後與首部字段 Content-MD5 的字段值比較
ex: Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在於檢查報文主體在傳輸過程中是否保持完
整,以及確認傳輸到達。
對報文主體執行 MD5 算法獲得的 128 位二進制數,再通過 Base64 編碼後將結果寫入 Content-MD5 字段
值。由於 HTTP 首部無法記錄二進制值,所以要通過 Base64 編碼處理。爲確保報文的有效性,作爲接收方
的客戶端會對報文主體再執行一次相同的 MD5 算法。計算出的值與字段值作比較後,即可判斷出報文主體的
準確性。
採用這種方法,對內容上的偶發性改變是無從查證的,也無法檢測出惡意篡改。其中一個原因在於,內容如
果能夠被篡改,那麼同時意味着 Content-MD5 也可重新計算然後被篡改。所以處在接收階段的客戶端是無法
意識到報文主體以及首部字段 Content-MD5 是已經被篡改過的。