Fiddler 中 Chunked Transfer-Encoding 表示什么?

Fiddler 中 Chunked Transfer-Encoding 意思为采用了“HTTP协议之chunk编码(即 分块传输编码)”

即在响应头添加了 Transfer-Encoding: chunked ,具体可以在Fiddler 的 Response Headers 中查看到。

Fiddler 中 Chunked Transfer-Encoding 意思

Transfer-Encoding,是一个 HTTP 头部字段(响应头域),字面意思是:传输编码。最新的 HTTP 规范里,只定义了一种编码传输:分块编码(chunked)

分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。用于http传送过程的分块技术,原因是http服务器响应的报文长度经常是不可预测的,使用Content-length的实体搜捕并不是总是管用。

分块技术:实体被分成许多的块,也就是应用层的数据,TCP在传送的过程中,不对它们做任何的解释,而是把应用层产生数据全部理解成二进制流,然后按照MSS的长度切成一分一分的,一股脑塞到tcp协议栈里面去,而具体这些二进制的数据如何做解释,需要应用层来完成;所以在这之前,一块整体应用层的数据需要等它分成的所有TCP segment到达对方,重新组装后,应用程序才使用自己的解码方法还原它们。

如以前实现:Content-Encoding: gzip 输出时,先把整个压缩后的数据写到一个很大的字节数组里(如 ByteArrayOutputStream),然后得到数组大小 -> Content-Length
如果结合Transfer-Encoding:chunked使用,就不必申请一个很大的字节数组了,可以一块一块的输出,更科学,占用资源更少。

HTTP1.1采用了持久的连接,也就是一次TCP的连接不马上释放,允许许多的请求跟响应在一个TCP的连接上发送,所以客户机与服务器需要某种方式来标示一个报文在哪里结束和在下一个报文在哪里开始。简单的方法是使用呢content-length,但这只有当报文长度可以预先判断的时候才起作用,而对于动态的内容或者在发送数据前不能判定长度的情况下,可以使用分块的方法来传送编码。

Content-Encoding Transfer-Encoding 二者经常会结合来用,其实就是针对 Transfer-Encoding 的分块再进行 Content-Encoding压缩。



我的回答