http 協議的chunck概念

2021-07-04 08:26:58 字數 1677 閱讀 7890

有時候,web伺服器生成http response是無法在header就確定訊息大小的,這時一般來說伺服器將不會提供content-length的頭資訊,而採用chunked編碼動態的提供body內容的長度。

進行chunked編碼傳輸的http response會在訊息頭部設定:

transfer-encoding: chunked

表示content body將用chunked編碼傳輸內容。

chunked編碼使用若干個chunk串連而成,由乙個標明長度為0的chunk標示結束。每個chunk分為頭部和正文兩部分,頭部內容指定下一段正文的字元總數(十六進製制的數字)和數量單位(一般不寫),正文部分就是指定長度的實際內容,兩部分之間用回車換行(crlf)隔開。在最後乙個長度為0的chunk中的內容是稱為footer的內容,是一些附加的header資訊(通常可以直接忽略)。具體的chunk編碼格式如下:

chunked-body = *chunk

"0" crlf

footer

crlf 

chunk = chunk-size [ chunk-ext ] crlf

chunk-data crlf

hex-no-zero =

chunk-size = hex-no-zero *hex

chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )

chunk-ext-name = token

chunk-ext-val = token | quoted-string

chunk-data = chunk-size(octet)

footer = *entity-header

rfc文件中的chunked解碼過程如下:

最後提供一段php版本的chunked解碼**:

$chunk_size=(

integer

)hexdec

(fgets

( $socket_fd

,4096

) );

while(!

feof

($socket_fd

) &&

$chunk_size

>0)

http協議中的tranfer-encoding:chunked編碼解析

通常情況下,transfer-encoding域的值應當為chunked,表明採用chunked編碼方式來進行報文體的傳輸。chunked編碼是http/1.1 rfc裡定義的一種編碼方式,因此所有的http/1.1應用都應當支援此方式。

chunked編碼的基本方法是將大塊資料分解成多塊小資料,每塊都可以自指定長度,其具體格式如下(bnf文法):

chunked-body   = *chunk            //0至多個chunk

last-chunk         //最後乙個chunk 

trailer            //尾部

crlf               //結束標記符

chunk          = chunk-size [ chunk-extension ] crlf   

chunk-data crlf

chunk-size     = 1*hex

last-chunk     = 1*("0") [ chunk-extension ] crlf

HTTP協議的概念

http是在網路上傳輸html的協議,用於瀏覽器和伺服器的通訊。特點 http是乙個基於tcp ip通訊協議來傳遞資料,預設埠號為80。tcp ip是什麼?tcp ip是用於網際網路的通訊協議。https是以安全為目標的http通訊,簡單講師http的安全版,預設埠號是443。一 https協議需要...

HTTP協議 概念

http 超文字傳輸協議 hyper text transfer protocol 當我們在瀏覽器的位址列輸入乙個位址的時候,就能夠訪問伺服器的某個頁面 這個過程本身就是兩個應用程式之間的互動,乙個應用程式是瀏覽器,另乙個應用程式是伺服器。協議是什麼?協議就是不同的應用程式之間按照事先做好的約定進行...

HTTP協議概念

http協議是 超文字傳輸協議 的縮寫,適用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。http預設埠號為80 tcp ip是什麼?答 tcp ip是用於網際網路的通訊協議 https 超文字傳輸安全協議,是以安全為目標的http通道,簡單講是http的安全版。http使用埠443 1.h...