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

在程序中由于如果是一般的情况下,那么客户端发送过请求消息之后,服务器端返回的信息头中应该包括一个字段叫做“ 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 就可以从服务器端获得制定大小的文件了 .
 

你可能感兴趣的:(Web,header,服务器)