http1.0
它使⽤⼀条⻓连接(keep-alive)传输⼀个请求和响应。它的特点是每次请求和响应完毕后都会销毁TCP 连接。同时前一个响应完成后才发送下一个请求。这样做有两个问题:
-
无法多路复用
只能按顺序传输⼀个请求和响应,⽆法同时传输多个请求和响应。
-
队头阻塞
如果前一个请求被某种原因阻塞,导致后续请求无法连接。
-
每次请求需要新建连接
每次请求都需要新建连接,连接的建⽴和关闭过程会消耗时间。
http1.1
http1.1 是 http1.0 的改进版.它做出了以下改进
-
长连接 / 持久连接 / 连接复用
http1.1允许在请求时增加请求头connection:keep-alive, 这样便允许后续的客户端在一段时间内复用之前的TCP 连接。通过⼀个 TCP 连接传输多个请求和响应,减少了连接建⽴和关闭的时间。
-
管道化
基于长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回。但是各个请求之间存在依赖关系,一个请求出错,后面的请求都失败。
-
缓存处理
新增响应头 cache~control, 用于实现客户端缓存。
-
断点传输
在上传/下截资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网绍故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率。

http2.0
http2.0优化了传输效率,它主要有以下改进:
-
二进制分帧
将传输的消息分为更小的二进制帧,每帧有自己的标识序号,即便被随意打乱也能在另一端正确组装。可以独⽴传输,解决了队头阻塞问题,提⾼了传输效率。
-
多路复用
允许同时通过同⼀个连接并⾏传输多个请求和响应,解决了队头阻塞问题。
-
头部压缩
http2.0通过字典的形式,将头部中的常见信息替换为更少的字符,极大的减少了头部的数据量,从而实现更小的传输量。
http3.0
- QUIC 协议:使⽤ QUIC 协议替代 TCP,⽀持更快的连接建⽴和更快的重传,能够解决 TCP 队头阻塞和 TCP 握⼿延迟的问题。
- 数据流分离:将⼀个连接分成多个数据流,每个数据流都有独⽴的 ID,可以独⽴控制和传输数据。

7万+

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



