如果把 「HTTP 報文」想象為因特網貨運系統的「箱子」,那么「HTTP 實體」就是報文中的實際的「貨物」.
其中,實體又包含了「實體首部」 和 「實體主體」,實體首部用于描述各種參數,實體主體就是原始貨物.
常見的實體首部
實體的大小: Content-Length
定義:
報文的字節的數量
功能:
HTTP 的早期版本用 Content-Length.來判斷是否關閉連接,進而判斷報文結束.
注意:
- 持久連接必須有 Content-Length ,因為連接是持久的,因此客戶端無法依賴連接關閉來判別報文的結束.
- 經過內容編碼之后,說明的是編碼之后的報文主體的長度.
實體摘要: Content-MD5
定義:對報文主體進行 MD5 算法得到的結果
功能:防止報文被篡改
媒體類型: Content-Type
定義:主體的 MIME 類型
注意:經過內容編碼之后, Content-type 首部說明的仍是編碼之前實體主體的類型.
一種Content-type:multipart
定義:報文中存在多個報文,合成一個復雜的報文發送
功能:支持多部分主體,常常用于填寫表格
內容編碼: Content-Encoding
定義:為了達到減少傳輸時間的目的,對主體內容進行壓縮.
類型:
內容編碼的類型是 Content-Encoding 的值,有下面幾種:
- gzip
- compress
- deflate
- identity(沒有編碼,當沒有 Content-Encoding 時的值)
傳輸編碼: Transfer-Encoding
定義
與內容編碼僅僅把報文主體內容編碼不同, 傳輸編碼將整個報文進行編碼.
分塊編碼
定義:將報文分割為大小已知的塊,塊與塊緊挨著發送.
格式:以長度值為 0 的塊代表主體結束.
特點:不需要知道 Content-length(在主體是動態創建的情況下很實用)
實例操控 instance manipulations
定義:在不同的時間下,一個對象可能有不同的版本.要求客戶端能夠標示它所擁有的資源的副本,并且在一定的條件下請求實例.
主要有兩種辦法進行實體操控:
- 范圍請求
- 差異編碼
范圍請求:Accept-Ranges
定義:
允許客戶端在副本不再有效的情況下,不請求完整副本,只請求文檔的一個范圍
應用:
下載中斷的文件在重新下載時不需要重頭開始下載.
差異編碼:A-IM
定義:
當頁面的內容發生變化的時候,即使改動的內容很少,也要重新請求.
差異編碼指的是客戶端愿意服務器只發送改變的部分,以更快地得到更新的頁面.
A-IM 這個 header
A-IM: 是 Accept Instance Manipulation 的縮寫,其功能相當于:
客戶端說:“哦,對了,我能接受某些形式的實例操控,如果你會其中的一種的話,就不用發完整的文檔給我了.”
缺陷
如果一個網頁更新比較頻繁,服務器為了能夠更快地進行差異計算,于是需要把各個版本的文檔儲存在服務器上,導致硬盤的空間減少.