📄 126.htm
字号:
<p>HTTP协议四--关于Chunked编码 </p>
<p></p>
<p> </p>
<p> 在有时服务器生成HTTP回应是无法确定消息大小的,这时用Content-Length就无法事先写入长度,而需要实时生成消息长度,这时服务器一般采用Chunked编码。</p>
<p> 在进行Chunked编码传输时,在回复消息的头部有transfer-coding并定为Chunked,表示将用Chunked编码传输内容。采用以下方式编码:</p>
<p> Chunked-Body = *chunk</p>
<p> "0" CRLF</p>
<p> footer</p>
<p> CRLF </p>
<p> chunk = chunk-size [ chunk-ext ] CRLF</p>
<p> chunk-data CRLF</p>
<p></p>
<p> hex-no-zero = <HEX excluding "0"></p>
<p></p>
<p> chunk-size = hex-no-zero *HEX</p>
<p> chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )</p>
<p> chunk-ext-name = token</p>
<p> chunk-ext-val = token | quoted-string</p>
<p> chunk-data = chunk-size(OCTET)</p>
<p></p>
<p> footer = *entity-header</p>
<p> 编码使用若干个Chunk组成,由一个标明长度为0的chunk结束,每个Chunk有两部分组成,第一部分是该Chunk的长度和长度单位(一般不写),第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些没有写的头部内容。</p>
<p> 下面给出一个Chunked的解码过程(RFC文档中有)</p>
<p> length := 0</p>
<p> read chunk-size, chunk-ext (if any) and CRLF</p>
<p> while (chunk-size > 0) {</p>
<p> read chunk-data and CRLF</p>
<p> append chunk-data to entity-body</p>
<p> length := length + chunk-size</p>
<p> read chunk-size and CRLF</p>
<p> }</p>
<p> read entity-header</p>
<p> while (entity-header not empty) {</p>
<p> append entity-header to existing header fields</p>
<p> read entity-header</p>
<p> }</p>
<p> Content-Length := length</p>
<p> Remove "chunked" from Transfer-Encoding</p>
<p> 下一次将会讨论一些小问题,如POST方法的数据传输等。</p>
<p> 最后,还有一点要说的是,好像NetAnt的一个版本不支持Chunked编码,会显示无法确定内容长度,或许是版本太低的缘故,如果你也遇到这种问题,可以改用Net Vampire或其它支持Chunked编码的下载程序试试。</p>
<p> </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -