HTTP內容編碼與傳輸編碼

HTTP報文與實體

報文:HTTP通信的基本單位,由字節流組成

實體:請求或者響應的有效載荷數據,由實體首部和實體主題組成。

一般來說,實體主體作爲HTTP報文的主體進行傳輸。

內容編碼

在實體進行傳輸前,先將實體進行編碼,然後在進行傳輸。常見的內容編碼有:

  • gzip(GNU zip)
  • compress(UNIX系統的標準壓縮)
  • deflate(zlib)
  • identity(不進行編碼)
  • 在實體首部字段中,Content-Encoding會告知客戶端服務器對實體的主體部分選用的編碼方式
  • 對實體進行內容編碼傳輸時,不能再使用Content-Length首部字段 

傳輸編碼

在HTTP通信過程中,請求的編碼實體資源尚未全部傳輸完成之前,瀏覽器無法顯示請求頁面。在傳輸大量數據時,通過把數據分割成多塊,能夠讓瀏覽器逐步顯示頁面。這種把實體主題分塊的功能稱爲分塊傳輸編碼。

  • 用於服務器動態創建內容,無法知道主體的大小,通過分塊來判斷是否傳輸完畢。
  • 分塊傳輸編碼會將實體分爲多個部分(塊)。每一塊都會用十六進制來標記塊的大小,而實體的最後一塊會使用“0(CR+LF)”來標記。 
  • 首部字段Transfer-Encoding規定了傳輸報文主體時採用的編碼方式。HTTP/1.1的傳輸編碼方式僅對分塊編碼有效。
  • Trailer會事先說明在報文主體後(分塊長度爲0)記錄了哪些首部字段,應用於分塊編碼時。

 總結

  • 內容編碼是在傳輸前進行的,一般是爲了對實體主體進行壓縮
  • 傳輸編碼是在傳輸的過程中進行編碼,在內容編碼的基礎上,可以繼續對實體主體進行傳輸編碼,使其可以分塊傳輸,也可以不進行分塊傳輸編碼直接一次性進行完整傳輸

在網上看到一個回答非常好,粘貼到此處幫助讀者更好地去理解http內容編碼和傳輸編碼的區別和作用?

參考文獻

  1.  《圖解HTTP》

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