1. 程式人生 > >Out Of Date>搬家到http://imee.cn了

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編碼的下載程式試試。