不分块传输:http把客户端需要的东西整个交给tcp,由tcp切块后发送给客户端,客户端接受后在tcp层组装完整发给浏览器使用。
分块传输:http把客户端需要的东西切分成1、2、3到n块,然后将1块发给tcp,tcp将块1再次切分后发给客户端,客户端接受后在tcp组装成块1发给http层。然后服务器与客户端用同样的方式发送块2、块3到块n。客户端的http在接收完所有块后组装成一个完整的响应。整个过程使用同一个tcp连接,块1到块n如上是挨个发送的。如果是http2,则基于多路复用技术块1到块n可以同时发送。所以分块抓包http只能抓到一个包,如果抓tcp的包,分不分块,都会抓到很多包。
分段:分段就是对某个资源的一部分进行请求(类似于把一个大文件切分成很多小文件,类似压缩中的分卷功能,然后客户端只对这些小文件中的一部分进行请求)
分段是对需要哪些资源进行一种说明,分块是一种传输机制,完全不同的两个东西,只是名字比较像。
分块传输中chunk是传输时分成小块逐个发送,分段传输中range是取大文件中间的一部分。
那么分块的时候每个块都会复制一次响应头吗,还是只有块1带有请求头呢:其实分块传输过程中的chunk数据实际上是一个很大的请求,只有一个header,只是逐个地发出去,而不是一次性发。