1. 程式人生 > >《圖解HTTP》讀書筆記(第三章)

《圖解HTTP》讀書筆記(第三章)

HTTP報文內的資訊

用於HTTP協議互動的資訊被稱為HTTP報文。請求端的HTTP報文叫做請求報文,響應端的叫做響應報文HTTP報文字身是由多行(用CR+LF做換行符)資料構成的字串文字。

HTTP報文大致可分為報文首部和報文主體兩部塊。兩者由最初出現的空行(CR+LF、回車符+換行符)來劃分。通常,並不一定要有報文主體。

編碼提升傳輸速率

HTTP在傳輸資料時可以按照資料原貌直接傳輸,但也可以在傳輸過程中通過編碼提升傳輸速率,但這會消耗更多的CPU等資源。

報文主體和實體主體的差異

  • 報文:是HTTP通訊中的基本單位,由8位組位元組流組成,通過HTTP通訊傳輸。
  • 實體:作為請求或響應的有效載荷資料(補充項)被傳輸,其內容由實體首部和實體主體組成。

HTTP報文的主體用於傳輸請求或響應的實體主體。 通常,報文主體等於實體主體。只有當傳輸中進行編碼操作時,實體主體的內容發生變化,才導致它和報文主體產生差異。

壓縮傳輸的內容編碼

內容編碼指明應用在實體內容上的編碼格式,並保持實體資訊原樣壓縮。內容編碼後的實體由客戶端接收並負責解碼。 常見的內容編碼有:gzip(GNU zip)、compress(UNIX系統的標準壓縮)、deflate(zlib)、identity(不進行編碼)

分隔傳送的分塊傳輸編碼

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

Chunked Transfer Coding)。

分塊傳輸編碼會將實體主體分成多個部分(塊)。每一塊都會用十六進位制來標記塊的大小,而實體主體的最後一塊會使用“0(CR+LF)”來標記。

使用分塊傳輸編碼的實體主體會由接收的客戶端負責解碼,恢復到編碼前的實體主體。

傳送多種資料的多部分物件集合

HTTP協議中採納了多部分物件集合,傳送的一份報文主體內可含有多型別實體。通常實在圖片或文字檔案等上傳時使用。

獲取部分內容的範圍請求

下載大尺寸的圖片的過程中,如果網路中斷,則需要重新下載。因此需要一種可恢復的機制。 實現該功能需要指定下載的實體範圍,像這樣,指定範圍傳送的請求叫做範圍請求

。 執行範圍請求時,會用到首部欄位Range來指定資源的byte範圍。響應會返回狀態碼206 Partial Content

如果伺服器端無法響應範圍請求,則會返回狀態碼200 OK和完整的實體內容。

內容協商返回最合適的內容

內容協商機制是指客戶端和伺服器端就響應的資源內容進行交涉,然後提供給客戶端最為適合的資源。內容協商會以響應資源的語言、字符集、編碼方式等作為判斷的基準。
比如同一個Web網站可能存在相同內容的頁面,不同的就是語言的不同,那麼當請求傳送,伺服器返回什麼頁面呢?

內容協商技術有以下三種類型:

  • 伺服器驅動協商
  • 客戶端驅動協商
  • 透明協商