http中采用块传递方式的补充

来源:互联网 发布:全球经济数据 市盈率 编辑:程序博客网 时间:2024/06/09 21:43
在程序中由于如果是一般的情况下,那么客户端发送过请求消息之后,服务器端返回的信息头中应该包括一个字段叫做“Content-length,这个字段,在这个字段之后紧接着就是将要返回给客户端的文件的大小,我们只要将这个值捕获,从服务器端接收相应大小的文件就可以了。但是有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度所以在程序中就无法获得文件的大小,Chunked编码的文件的格式是:
采用若干个块连接在一起,最后一个块的大小为0来决定块的结束,也就是文件的结束。具体的格式是:
 
(信息头)/r/n 165 [块大小,十六进制表示] /r/n(块的具体内容)/r/n 0 [块的大小为0,表示块的结束]/r/n
 
在程序中,将获得的信息头进行分析,从以前的方式中如果获得的文件的大小为0的情况下,那么就可以采用了块的传递方式,再进一步判断,如果在信息头中包含有Transfer-Encoding这个字段的话,就是采用了块传递的方式。这时就从信息头后面一个一个字符的从服务器端获得返回字符。以/r’’/n’作为循环的结束。把这个字符串保存在一个动态数组中。这个数组中保存的就是十六进制的文件的大小,将字符串转化成整数,返回给原来程序中用来保存文件大小的变量,利用Receive就可以从服务器端获得制定大小的文件了.