在进行Http传输中,可以通过设置Transfer-Encoding以进行传输编码。其中chunked编码表示分块进行数据传输,其通过一个0长度的chunk块表示数据传输完毕。对于在传输过程中的chunked块,则通过以下的一个数据格式进行描述:
chunk-size [ chunk-extension ] CRLF chunk-data CRLF
不考虑chunked-extension属性,则可以理解为先描述块长度,然后接回车换行,接下来再描述相应长度的数据信息,最后接回车换行符,即完成一个chunk编码信息。
这里的chunk-size,与其它的传输不同,这里需要设置为 16 进制数字字符串。即不是传输认为的设置一个长度值即可。对于一个长度值为255的chunk块,其16进制为ff(小写表示),直接编码即为 ff。但这里要求为数字字符串,即以字符串的方式来描述编码值,编码为'f''f',针对f字符的编码值为 66(16进制),那么255长度的实际编码值即为 66 66。
一个255长度的编码片断,类似如下所示:
如上所示的标记处,前面为头结束的2个CRLF值。
在Http编码中,只有这里的chunked编码有点特别。其它的长度信息如content-length值等,都是使用正常的长度值(16进制),确实有点奇怪。在编码时,如果对这里的编码头没写正确,那么输出到客户端的数据永远都是错的…