小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
本文中的图片都来自小林Coding的 图解网络 ~ 个个都是宝藏文章哈~
另外各位大佬们在工作/学习中如果有遇到关于这三个版本的HTTP协议的内容 也欢迎交流 一起学习 一起把知识点们加深印象~
本文主要内容导航
HTTP/1.1 相比 HTTP/1.0 提高了哪些性能?
HTTP/2针对HTTP/1.1做了哪些优化?
HTTP/2有哪些缺陷 HTTP/3又做了哪些优化?
三个版本的HTTP协议各自优缺点小结
1.HTTP/1.1 相比 HTTP/1.0 提高了哪些性能?
- 【1】TCP长连接的方式改善了短连接造成的性能开销
可以很明显地看出来 长连接的效率要高了很多!!
省着不断地建立、断开TCP连接!
(虽说省去了这些建立、断连会高效很多 但是一直连着也不行 为了防止恶意连接导致服务端服务受损 可以限制客户端的最大长连接数)
-
【2】支持管道网络传输
-
第一个请求发出去了 不必等待其回来就可以发第二个
- 减少整体的响应时间
-
HTTP/1.1的性能瓶颈
- 请求/响应头部 Header未经压缩就发送
- 发送冗长的首部
- 服务器响应慢的话 容易造成队头阻塞
队头阻塞是较常见的问题
- 没有请求优先级控制
- 请求只能从客户端开始 服务端只能被动响应
2.HTTP/2针对HTTP/1.1做了哪些优化?
首先 HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。
针对HTTP/1.1的性能瓶颈 HTTP/2做了如下优化
-
【1】头部压缩
- 使用HPack算法进行头部压缩(见上图)
-
【2】报文全面采用二进制格式
- 这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。
-
【3】每个请求/回应的所有数据包 称为数据流 每个数据流都标记着一个独一无二的编号
-
客户端可以指定数据流的优先级 服务器会优先响应优先级高的Stream(数据流)
- 有了请求优先级控制 就可以避免队头阻塞!!
-
-
【4】利用多路复用 在一个连接中并发多个请求/回应
-
不用按照顺序一一对应
-
移除了HTTP/1.1中的串行请求 不需要排队等待!
- 可以避免队头阻塞问题
- 可以降低延迟
- 可以大幅度提高连接的利用率!
-
-
【5】改善了传统的「请求 - 应答」⼯作模式 服务器可以主动向客户端发送消息!(服务器推送)
- 举例来说,在浏览器刚请求 HTML 的时候,就提前把可能会⽤到的 JS、CSS ⽂件等静态资源主动发给客户端,减少延时的等待,也就是服务器推送(Server Push,也叫 Cache Push)
3.HTTP/2有哪些缺陷 HTTP/3又做了哪些优化?
HTTP/2 主要的问题在于,多个 HTTP 请求在复⽤⼀个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求 的。所以⼀旦发⽣了丢包现象,就会触发 TCP 的重传机制,这样在⼀个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。
- HTTP/1.1 中的管道( pipeline)传输中如果有⼀个请求阻塞了,那么队列后请求也统统被阻塞住了
- HTTP/2 多个请求复⽤⼀个TCP连接,⼀旦发⽣丢包,就会阻塞住所有的 HTTP 请求。
这都是基于 TCP 传输层的问题,所以HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP
UDP 发⽣是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的⼀个丢包全部重传问题
⼤家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
- QUIC 有⾃⼰的⼀套机制可以保证传输的可靠性的。当某个流发⽣丢包时,只会阻塞这个流,其他流不会受到影响。
- TLS3 升级成了最新的 1.3 版本,头部压缩算法也升级成了
QPack - HTTPS 要建⽴⼀个连接,要花费 6 次交互,先是建⽴三次握⼿,然后是 TLS/1.3 的三次握⼿。QUIC 直接 把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数
所以, QUIC 是⼀个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复⽤的协议。
但是——QUIC 是新协议,对于很多⽹络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以 HTTP/3 现在普及的进度非常的缓慢,不知道未来 UDP 是否能够逆袭 TCP
三个版本的HTTP协议各自优缺点小结
-
HTTP/1
-
HTTP/1.0 缺点
- 安全性差
- 性能极差
-
HTTP/1.1 优点
- 长连接 提升性能
- 管道网络传输(长连接使pipeline成为可能) 提升性能
-
HTTP/1.1 缺点
- 安全性差
- 性能差
-
-
HTTP/2
-
优点
-
完全兼容HTTP/1.1
-
是更安全的HTTP 更快的HTTPS
-
基于HTTPS 安全性有保障!
-
解决HTTP/1.1的性能瓶颈 充分利用带宽 减低延迟 大幅度提高上网体验!
- 【1】使用HPack算法实现头部压缩;
- 【2】报文格式为二进制;
- 【3】每个请求/回应的所有数据包 称为数据流 每个数据流都标记着一个独一无二的编号 数据流优先级可以被指定;
- 【4】多路复用技术;
- 【5】服务器推送;
-
-
-
缺点
-
多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。
所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来
-
- HTTP/1.1 中的管道( pipeline)传输中如果有一个请求阻塞了,那么队列后请求也统统被阻塞住了。
- HTTP/2 多请求复用一个 TCP 连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求。
这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!
-
-
HTTP/3
-
优点
-
解决传输层的问题(利用UDP+QUIC协议)
- UDP 发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题
- QUIC 是⼀个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复⽤的协议。 该协议是HTTP/3的底层支撑协议 基于UDP 又取了TCP中的精华 实现了快&可靠的协议
-
-
缺点
- QUIC 是新协议,对于很多⽹络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以 HTTP/3 现在普及的进度非常的缓慢。
-