HTTP協議學習筆記十一

2021-08-01 07:48:51 字數 2087 閱讀 8106

實體和編碼

content-length首部對於持久連線是必不可少的,如果響應通過持久連線傳送,就可能有另一條http響應緊隨其後,客戶端通過content-length首部就可以知道報文

在何處結束,下一條報文從何處開始。因為是持久的,所以客戶端無法依賴連線關閉來判別報文的結束。

有一種情況下,使用持久連線時可以沒有content-length首部,即採用分塊編碼。資料分為一系列的塊來傳送的,每塊都有大**明。哪怕伺服器在生成首部的時候

不知道整個實體的大小,仍然可以使用分塊編碼傳輸若干已知大小的塊。

確定實體主體長度的規則:

1.如果特定的http報文型別中不允許帶有主體,就忽略content-length首部。

2.如果報文中含有描述傳輸編碼的transfer-encoding首部(不採用預設的http「恒等」編碼),那實體就應由乙個稱為「零位元組塊」的特殊模式結束,除非報文已經因連線

關閉而結束。如果沒有transfer-encoding,那麼content-length就是實體主體長度,如果有,就必須會略content-length,因為傳輸編碼會改變實體主體的表示和傳輸

方式。3.如果報文使用了multipart/byteranges(多部分/位元組範圍)**型別,而且沒有用content-length首部指出實體主體的長度,那麼多部分報文中的每個部分都要說明它

的自己的大小。

4.如果上面的規則都不匹配,。實體就在連線關閉的時候結束。實際上,只有伺服器可以使用連線關閉來指示報文的結束。

內容編碼過程,如圖:

1.**伺服器生成原始響應報文,其中有原始的content-type和content-length首部。

2.內容編碼伺服器(也可能是原始伺服器或下行的**)建立編碼後的報文,同樣有content-type但content-length可能不同(比如主體被壓縮了),

內容編碼伺服器再編碼後的報文中增加content-encoding首部,這樣接受的應用程式就可以進行解碼了。

3.接受程式得到編碼後的報文,進行解碼,獲得原始報文。

http事務中accept-encoding首部,如圖:

例:accept-encoding: compress,gzip

accept-encondig: *

accept-encondig: compresss;q=0.5,gzip;q=1.0

accept-encondig: gzip;q=1.0,identity;q=0.5, *;q=0

客戶端給每種編碼附帶q值引數來說明編碼的優先順序。q值的範圍從0.0到1.0,0.0說明客戶端不想接受所說明的編碼,1.0則表示最希望使用的編碼。

"*"表示「任何其他方法」,identity編碼代號只能在accept-encoding首部中出現,客戶端用它來說明相對於其他內容用編碼演算法的優先順序。

傳輸編碼與內容編碼,如圖:

分塊編碼,如圖:

內容編碼與傳輸編碼的結合,如圖:

傳輸編碼的規則:

1.傳輸編碼集合中必須包括「分塊」。唯一的例外是使用關閉連線來結束報文。

2.當使用分塊傳輸編碼時,它必須是最後乙個作用在報文主體之上的。

3.分塊傳輸編碼不能多次作用到乙個報文主體上。

這些規則使得接收方能確定報文的傳輸長度。

範圍請求,如圖:

客戶端的範圍請求僅當客戶端和伺服器擁有文件的同乙個版本時才有意義。

HTTP學習筆記 HTTP協議

tcp ip協議按層次分為四層 應用層,傳輸層,網路層,資料鏈路層。該層決定了向使用者提 用服務時通訊的活動。如ftp和dns服務等。傳輸層有兩個性質不同的協議 tcp和udp協議。網路層的作用就是計算機之間通過網路裝置進行傳輸時,選擇一條傳輸路線。用來處理連線網路的硬體部分,硬體上的範疇均在該層的...

http協議學習筆記

http 協議是建立在 tcp ip協議基礎上 http 協議全稱 超文字傳輸協議 http 協議1.0 1.1版本 目前通用的是1.1版本 http1.0 稱為短連線 http1.1 稱為長連線.所謂長,和短指的是 持續時間的 長連線 1.1 30s 短連線是傳送完資料就斷掉 基本結構 get t...

HTTP協議學習筆記

http協議 1.面試題 聊一下http協議 協議的完整通訊過程 2.通訊過程 1 請求 2 響應 3.http請求的方法 1 get 2 post 4.ios中傳送get post請求的手段 1 nsurlconnection 傳送乙個同步請求 nsdata sendsynchronousrequ...