1. 程式人生 > >HTTP圖解讀書筆記(第三章 HTTP報文內的HTTP資訊)

HTTP圖解讀書筆記(第三章 HTTP報文內的HTTP資訊)

目的:瞭解HTTP通訊響應和請求時怎麼運作的

一、HTTP報文

HTTP報文:用於協議互動的資訊被稱為HTTP報文

HTTP報文大致可分為報文首部和報文主體(應被髮送的資料),兩者由最初出現的空行來劃分,通常,並不一定要報文主體

二、請求報文和響應報文的結構

 請求行:包含請求URL、請求方法、HTTP版本

狀態行:狀態碼、原因短語、HTTP版本

首部欄位:包含請求和響應的各種條件和屬性的各類首部

一般有四種首部:請求首部、通用首部、響應首部、實體首部,可能包含HTTP法人RFC未定義的其他首部,例如cookie

三、編碼提升傳輸速率

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

  •  報文

        是 HTTP 通訊中的基本單位,由 8 位組位元組流(octet sequence,其中 octet 為 8 個位元)組成,通過 HTTP 通訊傳輸。

  • 實體  

       作為請求或響應的有效載荷資料(補充項)被傳輸,其內容由實體首部和實體主體組成。

HTTP 報文的主體用於傳輸請求或響應的實體主體。 

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

2. 壓縮傳輸的內容編碼

內容編碼指明應用在實體內容上的編碼格式,並保持實體資訊原樣壓縮。內容編碼後的實體由客戶端接收並負責解碼。

常見的內容編碼:

  • gzip(GNU zip)
  • compress(UNIX 系統的標準壓縮)
  • deflate(zlib)
  • identity(不進行編碼)

3. 分割傳送的分塊傳輸編碼

分塊傳輸編碼:HTTP通訊過程中,請求的編碼實體資源尚未傳輸完時,瀏覽器無法顯示請求頁面,在傳輸大容量資料時,通過把資料分成若干小塊,每一塊都會用十六進位制來標記塊的大小,而實體主體的最後一塊會使用“0(CR+LF)”來標記。讓瀏覽器逐步顯示頁面

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

多部分物件集合:容納多分不同型別的資料

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

多部分物件集合的包含的物件如下:

  • multipart/form-data

       在 Web 表單檔案上傳時使用。

  • multipart/byteranges

       狀態碼 206(Partial Content,部分內容)響應報文包含了多個範圍的內容時使

在HTTP報文中使用多部分物件集合時需要在報文首部新增Content-type

五、獲取部分內容的範圍請求

恢復機制:從上次下載中斷處開始下載。要實現恢復機制則需要制定下載實體的範圍,想這樣制定範圍傳送的請求叫範圍請求

 

針對範圍請求,響應碼為206。對於多重範圍的範圍請求,響應會在首部欄位 ContentType 標明 multipart/byteranges 後返回響應報文。如果伺服器端無法響應範圍請求,則會返回狀態碼 200 OK 和完整的實體內容。

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

內容協商機制:是指客戶端和伺服器端就響應的資源內容進行交涉,然後提供給客戶端最為適合的資源。內容協商會以響應資源的語言、字符集、編碼方式等作為判斷的基準。

包含在請求報文中的某些首部欄位(如下)就是判斷的基準

  • Accept
  • Accept-Chars
  • Accept-Encoding
  • Accept-Language
  • Content-Language

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

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

       是伺服器驅動和客戶端驅動的結合體,