HTTP1.1 — 1997
主要特点:
- 一次一份:发送一次请求,需要等到请求响应才能发送下一个请求
- 默认持久连接
- 明文传输
- 首部不压缩
- 支持管线化技术,用以解决队头阻塞问题,但因开发难度大而没有得到很好的应用
缺点:一旦有一份文件丢失,则会造成http队头阻塞。
应对措施
- 把 js、css 写入到 html 中。
- 把图片编码,以字符的形式嵌入到 html 中
- 把多个图片集合在一起,组成一张精灵图(雪碧图)
HTTP2 — 2015
主要特点
-
实现了多路复用
- 请求和响应报文分为不同的帧
- 帧里添加了流标识符,使得帧不必按顺序到达
-
压缩首部
- 使用 HPACK 算法
- 在服务器和浏览器都保存一张静态只读的表,存放状态码等数据
- 使用 HPACK 算法
-
HTTP2 的帧不是 ASCII 编码的报文,而是二进制的帧,使得解析方便
-
支持服务器推送
- 在响应一个文件后,提前发送可能需要的文件
缺点:没有解决 TCP 层面的队头阻塞
HTTP3 — 2019
特点
- 把 TCP 握手和 TLS 握手整合成 QUIC 握手
- 默认加密传输
- 基于 UDP 协议