Out Of Date>搬家到http://imee.cn了
在有時伺服器生成HTTP迴應是無法確定訊息大小的,這時用Content-Length就無法事先寫入長度,而需要實時生成訊息長度,這時伺服器一般採用Chunked編碼。
在進行Chunked編碼傳輸時,在回覆訊息的頭部有transfer-coding並定為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=token|quoted-string
chunk-data=chunk-size(OCTET)
footer=*entity-header
編碼使用若干個Chunk組成,由一個標明長度為0的chunk結束,每個Chunk有兩部分組成,第一部分是該Chunk的長度和長度單位(一般不寫),第二部分就是指定長度的內容,每個部分用CRLF隔開。在最後一個長度為0的Chunk中的內容是稱為footer的內容,是一些沒有寫的頭部內容。
下面給出一個Chunked的解碼過程(RFC文件中有)
length:=0
readchunk-size,chunk-ext(ifany)andCRLF
while(chunk-size>0){
readchunk-dataandCRLF
appendchunk-datatoentity-body
length:=length+chunk-size
readchunk-sizeandCRLF
}
readentity-header
while(entity-headernotempty){
appendentity-headertoexistingheaderfields
readentity-header
}
Content-Length:=length
Remove"chunked"fromTransfer-Encoding
下一次將會討論一些小問題,如POST方法的資料傳輸等。
最後,還有一點要說的是,好像NetAnt的一個版本不支援Chunked編碼,會顯示無法確定內容長度,或許是版本太低的緣故,如果你也遇到這種問題,可以改用NetVampire或其它支援Chunked編碼的下載程式試試。