區分Transfer-Encoding,TE,Content-Encoding,Accept-Encoding四個首部字段

Transfer-Encoding:用於指定傳輸報文主體時使用的編碼方式,屬於逐跳首部,即只在兩個節點間有效
TE:用於告知服務器客戶端能夠處理的編碼方式和相對優先級,屬於逐跳首部,即只在兩個節點間有效
Content-Encoding:用於指定報文主體已經採用的編碼方式,屬於端到端首部,即在整個傳輸過程中有效
Accept-Encoding:用於告知服務器客戶端能夠處理的編碼方式和相對優先級,屬於端到端首部,即在整個傳輸過程中有效
很顯然,Transfer-Encoding和TE是一組,Content-Encoding和Accept-Encoding是一組。
根本區別在於,Content-Encoding和Accept-Encoding限制的是報文主體在整個傳輸過程中使用的編碼方式,全局有效;Transfer-Encoding和TE限制的是報文主體在兩個節點間(源服務器和代理服務器之間、代理服務器和客戶端之間等)傳輸時使用的編碼方式,只在兩節點間有效。舉例說明:
假設A爲服務器,D爲客戶端,從A到D的路徑爲A-B-C-D,所需傳輸的資源爲X。步驟如下:
(1)D向A請求X,並在請求報文中指明自己支持的編碼方式爲gzip;

Accept-Encoding:gzip

(2)請求按路徑傳遞到A處,A將X用gzip編碼進行壓縮併發到B處,由B進行下一步轉交,並在報文中指明使用的編碼方式爲gzip;

Content-Encoding:gzip

(3)B認爲傳給C時使用分塊傳輸比較合理,就對A傳過來的報文實體進行分塊,並在報文中說明:

Content-Encoding:gzip
Transfer-Encoding:chunked

(4)C收到B的報文,並根據Transfer-Encoding:chunked判斷出B進行了分塊傳輸,於是C對收到的各個分塊進行重組,還原出完整的X(注意此時的X還是被gzip壓縮過的狀態)。之後C不進行分塊,直接將整個發送給D:

Content-Encoding:gzip

(5)D接收到響應報文,並根據Content-Encoding:gzip判斷出報文實體已經被gzip壓縮過了,於是對其進行解碼,最終獲得資源X。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章