前言
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1及以上版本中提供。通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。对于数据大小未知的情况下,使用分块传输编码是非常有用的。
Content-Length 全量传输
Content-Length:65535 表示当前传输的数据总大小为65535个字节,当服务器或客户端从body中读取了这么多字节之后,就认为数据已经读取完毕了。这是与Transfer-Encoding 分块传输是完全不同的一种数据传输方式。
example:
HTTP/1.1 200 OK[CRLF] |
Transfer-Encoding 分块传输
当请求头或响应头部中含有Transfer-Encoding: chunked时,Content-Length头将会被忽略,不起作用;同时每个块的开始处以16进制数值表示当前块的数据大小,后是\r\n;然后是当前chunk的数据内容,后是\r\n;终止块是一个常规块,但长度为零。当读取到chunk 的数据大小是0时,意味着请求或响应数据已经分块传输完毕。
example:
HTTP/1.1 206 OK[CRLF] |
PS:由于数据是分块传输的,服务器或客户端刚开始可能只接受到了部分chunk块,直到读取到终止块时,才认为请求或响应数据已经读取完毕。Http-Code=206 表示分块传输。
参考链接