一 概述
"Tranfer-Encodeing:chunked"和"Content-Length"这两个字段是互斥的,也就是说响应报文里这两个字段不能同时出现,一个响应报文的传输要么是长度已知,要么是长度未知(chunked)。
二 分块传输中的长度头
由于分块是长度未知报文发送的方式,那为啥分块意味着长度未知,后面不是提到块里面有个长度头嘛?而且单个块应该是一次http传输的内容,既然块里有长度头,那这次传输的内容长度也就能算出来,这次http的Content-Length 也就知道啊。
解答:举个例子,从GitHub上下载源码包,GitHub要实时压缩实时发送,而不是一下子压缩好再发送,这样body的长度一开始就是未知的。所以就要用分块编码,压缩一部分,就发一部分,这部分的长度是已知的,但总长度只有压缩完才能知道。
chunked编码用在“流式”收发数据的时候,通常数据是即时生成的,也就是动态数据。
HTTP响应中,`Transfer-Encoding: chunked`和`Content-Length`不能同时存在。Chunked编码用于长度未知的动态数据传输,例如GitHub实时压缩发送源码包时。这种编码允许数据流式发送,每块数据前会标明该块的长度,但整体内容长度只有在传输结束时才能确定。因此,对于实时生成的数据,Chunked编码提供了灵活的传输方式。
90

被折叠的 条评论
为什么被折叠?



