圖解HTTP之HTTP報文內的HTTP(三)
HTTP通訊過程包括從客戶端發往伺服器端的請求以及從伺服器端返回客戶端的響應。
用於HTTP協議互動的資訊被稱為HTTP報文。HTTP報文大致可分為報文首部和報文主體兩塊。兩者由最初出現的空行(CR+LF)來劃分。通常,並不一定要有報文主體。
請求報文和響應報文的首部組成:
-
請求行:請求方法(如:POST、GET)、請求URI和HTTP版本
-
狀態行:表明響應結果的狀態碼、原因和HTTP版本
-
首部欄位:請求和響應的屬性
-
其它:未定義的首部
報文message是HTTP通訊中的基本單位,由 8 位組位元組流(octet sequence,其中 octet 為 8 個位元)組成,通過 HTTP 通訊傳輸。
實體entity作為請求或響應的有效載荷資料(補充項)被傳輸,由實體首部和實體主體組成。
HTTP報文的主體用於傳輸請求或響應的實體主體。通常,報文主體等於實體主體。只有當傳輸中進行編碼操作時,實體主體的內容發生變化,才導致它和報文主體產生差異。
常見的內容編碼:
-
gzip(GNU zip)
-
compress(UNIX系統的標準壓縮)
-
deflate(zlib)
-
identity(不進行編碼)
多部分物件集合(Multipart)
-
multipart/from-data 在Web表單檔案上傳時使用
-
multipart/byteranges 狀態碼206響應報文包含多個範圍的內容時使用
指定範圍傳送的請求叫做範圍請求Range Request,如對一份 10 000 位元組大小的資源,如果使用範圍請求,可以只請求5001~10 000 位元組內的資源。
內容協商Content Negotiation,客戶端和伺服器端就響應的資源內容進行交涉,然後提供給客戶端最為適合的資源。
包含在請求報文中的某些首部欄位就是判斷的基準。如Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content- Language。
內容協商技術有以下 3 種類型:
-
伺服器驅動協商(Server-driven Negotiation)由伺服器端進行內容協商,以請求首部欄位為參考。
-
客戶端驅動協商(Agent- driven Negotiation)由客戶端進行內容協商,使用者從瀏覽器可選項中手動選擇。
-
透明協商(Transparent Negotiation)是伺服器驅動和客戶端驅動的結合體,是由伺服器端和客戶端各自進行內容協商的一種方法。