http報文:用於http協議互動的資訊,是由多行資料構成的字串文字(用cr+lf作換行符)。
結構:報文首部+空行+報文主體(非必需)
請求報文:客戶端的http報文。 報文首部的內容:請求行,請求首部字段,通用首部字段,實體首部字段,其他。
響應報文:伺服器端的http報文。 報文首部的內容:狀態行,響應首部字段,通用首部字段,實體首部字段,其他。
編碼提公升傳輸速率
http在傳輸資料時可以進行編碼來提公升傳輸速率。編碼的操作需要計算機來完成,因此會消耗更多的cpu等資源。
內容編碼指明應用在實體內容上的編碼格式,並保持實體資訊原樣壓縮。內容編碼後的實體由客戶端接受並負責解碼。
常見的內容編碼有:gzip(gnu zip)、compress(unix系統的標準壓縮)、deflate(zlib)、identity(不進行編碼)。
分塊傳輸編碼(chunked transfer coding):一種把實體主體分塊的功能。
分塊傳輸編碼會將實體主體分成多個部分(塊)。每一塊都會用十六進製制來標記塊的大小,而實體主體的最後一塊會用「0(cr+lf)」來標記。
由客戶端進行解碼。
http/1.1中存在傳輸編碼(transfer coding)的機制。它可以在通訊時按照某種編碼方式傳輸,但只定義作用域分塊傳輸編碼中。
傳送多種資料的多部分物件集合
在http報文中使用多部分物件集合時,需要在首部欄位裡加上content-type。
multipart/form-data:在web表單檔案上傳時使用。
multipart/byteranges:狀態碼206(partial content,部分內容)響應報文包含了多個範圍的內容時使用。
範圍請求(range request)
執行範圍請求時,會用到首部欄位range來指定資源的byte範圍。
#5001~10000位元組
range: bytes=5001-10000
#從5001位元組之後全部的
range: bytes=5001-
#從一開始到3000位元組,和5000-7000位元組的多重範圍
range: bytes=-3000, 5000-7000
針對範圍請求,相應會返回狀態碼為206 partial content的響應報文。
對於多重範圍的範圍請求,相應會在首部欄位content-type標明multipart/byteranges後返回響應報文。
如果伺服器端無法響應範圍請求,則會返回狀態碼 200 ok和完整的實體內容。
內容協商(content negotiation)
內容協商機制是指客戶端和伺服器端就響應的資源內容進行交涉,然後提供給客戶端最為適合的資源。
用處:當瀏覽器的預設語言為英語或中文,訪問相同uri的web頁面,會顯示對應的英語班或中文版web頁面。
三種型別:
1.伺服器驅動協商(server-driver negotiation):由伺服器端進行內容協商。以瀏覽器傳送的首部字段作為判定的依據,並不一定能篩選出最優的內容。
2.客戶端驅動協商(agent-driver negotiation):由客戶端進行內容協商的方式。使用者從瀏覽器顯示的可選列表中手動選擇。
3.透明協商(transparent negotiation):是伺服器驅動和客戶端驅動的結合體,由伺服器端和客戶端各自進行內容協商的一種方法。
http報文內的http資訊
1.請求報文和響應報文的首部內容組成 請求行 包含請求的方法,請求uri和http版本。狀態行 包含相應結果的狀態碼,原因短語和http版本。首部字段 通用首部,請求首部,響應首部和實體首部。其他 包含http的rfc裡未定義的首部 cookie等 2.編碼提公升傳輸速率 壓縮傳輸的內容編碼 gzi...
HTTP報文內的HTTP資訊
報文的定義 用於http協議的資訊被稱為http報文 報文由報文首部和報文主體構成,中間由 cr lf 回車 換行 分割開來 由於報文的傳輸可以通過編碼提公升傳輸效率,所以需要了解下報文 message 與實體 entity 的區別 可以看出在一般情況下報文主體和實體主體是一致的,但在傳輸中進行編碼...
HTTP報文內的HTTP資訊
宣告 本人的所有部落格皆為個人筆記,作為個人知識索引使用,因此在敘述上存在邏輯不通順 跨度大等問題,希望理解。分享出來僅供大家學習翻閱,若有錯誤希望指出,感謝!http報文是由多行資料構成的字串文字,使用cr lf換行 cr 回車符 r lf 換行符 n http報文大致可分為報文首部和報文主體兩部...