HTTP協議的chunked編碼(chunked transfer encoding分塊傳輸編碼)

weixin_34402090發表於2012-10-08

一般情況HTTP的Header包含Content-Length域來指明報文體的長度。如:

 有時候服務生成HTTP回應是無法確定訊息大小的,比如大檔案的下載,或者後臺需要複雜的邏輯才能全部處理頁面的請求,這時用需要實時生成訊息長度,伺服器一般使用chunked編碼。

在進行Chunked編碼傳輸時,在回覆訊息的Headers有transfer-encoding域值為chunked,表示將用chunked編碼傳輸內容。使用chunked編碼的Headers如下(可以利用FireFox的FireBug外掛或HttpWatch檢視Headers資訊,HttpWatch還可以檢視chunked的個數):

chunked採用以下方式編碼:

Chunked-Body=*chunk
"0"CRLF
footer
CRLF
chunk=chunk-size[chunk-ext]CRLF
chunk-dataCRLF
hex-no-zero=<HEXexcluding"0">
chunk-size=hex-no-zero*HEX
chunk-ext=*(";"chunk-ext-name["="chunk-ext-value])
chunk-ext-name=token
chunk-ext-val=tokenquoted-string
chunk-data=chunk-size(OCTET)
footer=*entity-header

編碼使用若干個Chunk組成,由一個標明長度為0的chunk結束,每個Chunk有兩部分組成,第一部分是該Chunk的長度和長度單位(一般不寫),第二部分就是指定長度的內容,每個部分用CRLF(全稱carriage return/line feed 回車換行)隔開。在最後一個長度為0的Chunk中的內容是稱為footer的內容,是一些沒有寫的頭部內容。

 

 

相關文章