HTTP的演进
HTTP1.0到HTTP1.1的优化
- 使用TCP长连接的方式改善了HTTP1.0短连接造成的性能开销
- 支持网络管道传输,只要有一个请求发送,其他的请求不需要等其回来也就可以继续发送请求,减少整体的响应时间
HTTP1.1的弊端
- 请求为被压缩就被发送出去,导致头部的信息过大,只能压缩到Body上
- 头部重复字段发送多次造成资源的浪费
- 没有优先级的控制(有一些请求比较急可以优先处理)
- 只能由客户端发送给服务器,服务器只能被动的接收
- 造成队头阻塞fas[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fv4OiWF-1626017937001)(httpfa’sark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h1a2FpeQ==,size_16,color_FFFFFF,t_70)]
HTTP2.0的优化
1. 头部压缩
- HTTP2.0r如果你同时发送多个请求,他们的头部是一样的或者是相似的。那么协议会被你消除重复的部分
- 消除原理:在客户端和服务器之间维护一个头信息表,所有的字段都存入这个表中,生成索引号,以后就可以不发送同样的字段了,只发索引号,这样便能够起到压缩的作用(HPACK算法)
2. 格式转换
- HTTP2.0不在使用HTTP1.1一样的纯文本报文,而是采用二进制帧的方式,头信息和数据体都是二进制帧,虽然不方便我们阅读,但是对于机器很友好,能够加快机器的速度
3. 数据流
- 数据流:每一个请求或者响应的所有数据包都可称之为数据流
- HTTP2.0的数据包不是按顺序发送的,同一个连接里面的数据包,可能属于不同的回应,所以必须对每一个数据包进行标记
- 客户端可以通过指定数据流的优先级来设定请求的优先级别
4. 多路复用
- HTTP2.0是可以在一个连接中并发多个请求或者响应的,而且不需要按照顺序一一对应,移除了HTTP1.1的串行处理,解决了HTTP1.1造成的队头阻塞问题
5. 服务器推送
- HTTP/2 还在⼀定程度上改善了传统的「请求 - 应答」⼯作模式,服务不再是被动地响应,也可以主动向客户端发送消息。
HTTP2.0的弊端(传输层协议的弊端)
- HTTP/2 主要的问题在于,多个 HTTP 请求在复⽤⼀个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以⼀旦发⽣了丢包现象,就会触发 TCP 的᯿传机制,这样在⼀个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来
- 这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!