http1.0、http1.1、http2 版本对比
http 1.0
- 无状态
- 无法复用连接,每次请求都需要TCP连接。
- 队头阻塞,下一个请求必须在前一个请求响应到达之前才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了。
- 不支持断点续传,每次都会传送全部的页面和数据。
http 1.1
- 持久连接,通过设置
Connection: keep-alive
保持HTTP连接不断 - 管道机制,同一个TCP连接里,客户端可以同时发送多个请求
- 支持断点续传, 通过设置
Range
来实现
- 可以通过管道传输,多个请求同时发送,但是会出现 「队头阻塞(Head-Of-Line Blocking)」(前一个响应慢,后面的请求就排队等着)。
- 明文传输,不安全
- 不支持服务器推送
- 无状态,头部开销巨大,每次请求都要发送一个新的请求头
http 2.0
- 二进制分帧,header 和 data 分离
- 多路复用,使用多个 steam,每个stream又分帧传输,使得一个TCP可以处理多个http请求
- 头部压缩,两端维护一个 header索引,通过key匹配
- 服务器推送
- TCP + TLS建立连接的延时
- TCP的队头拥塞并没有彻底解决
- 多路复用导致服务器压力上升,容易超时
HTTP 3.0
- 基于 Google的QUIC协议(UDP实现的)
- 减少了 TCP 三次握手,以及TLS握手的时间