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 種類型:
- 伺服器驅動協商
- 客戶端驅動協商
- 透明協商
是伺服器驅動和客戶端驅動的結合體,