HTTP各版本区别

561 阅读5分钟

HTTP 协议从 1.0 到 3.0 经历了多次重大改进,每代协议都在性能、效率和功能上进行了优化。以下是 HTTP/1.0、HTTP/1.1、HTTP/2.0 和 HTTP/3.0 的详细对比:

1. HTTP/1.0

  • 发布时间:1996 年
  • 特点
    • 短连接:默认每次请求都会建立一个新的 TCP 连接,并在响应完成后关闭连接。通过 Connection: keep-alive 头部字段支持长连接,但需要显式启用。
    • 简单:协议设计简单,易于实现。
  • 性能瓶颈
    • 频繁建立和关闭连接导致性能开销大。
    • 队头阻塞(Head-of-Line Blocking),由于HTTP1.0规定下一个请求必须在前一个请求响应到达之前才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了。

2. HTTP/1.1

  • 发布时间:1997 年
  • 特点
    • 长连接:默认支持长连接,多个请求可以复用同一个 TCP 连接。
    • 管道化(Pipelining):在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。但是服务器必须按照接收请求的顺序发送对这些管道化请求的响应,仍然存在队头阻塞问题。HTTP/1.1 管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞。
    • 分块传输编码(Chunked Transfer Encoding):支持流式传输,无需提前知道响应内容的长度。
    • 缓存机制:引入了 ETagCache-Control 等头部字段,优化缓存管理。
    • Host 头部:支持虚拟主机(一个 IP 地址托管多个域名)。
  • 性能瓶颈
    • 队头阻塞问题仍然存在。
    • 请求和响应头部冗余,未压缩。

3. HTTP/2.0

  • 发布时间:2015 年
  • 特点
    • 二进制协议:将请求和响应数据分为更小的帧(Frame) ,每个帧都有一个唯一的流 ID(Stream ID),用于标识它属于哪个请求或响应。帧是 HTTP/2.0 的最小通信单位。流(stream)是一个独立的、双向的虚拟通道,用于传输一个完整的请求和响应。每个流都有一个唯一的 ID,多个流可以在同一个 TCP 连接上并行传输。
    • 多路复用(Multiplexing):在同一个 TCP 连接上并行发送多个请求和响应,解决了队头阻塞问题。1. 客户端发送多个请求,每个请求被分为多个帧,并分配一个唯一的流 ID;1. 服务器接收这些帧,根据流 ID 将它们重新组装为完整的请求;1. 服务器处理请求,并将响应数据分为多个帧,发送回客户端;1. 客户端根据流 ID 将帧重新组装为完整的响应。由于帧是独立传输的,因此不同请求和响应的帧可以交错发送,实现真正的并发
    • 头部压缩(HPACK):使用 HPACK 算法压缩请求和响应头部,减少冗余数据。在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,就不用重复发送同样字段了,只发送索引号,减少数据量提高速度。
    • 服务器推送(Server Push):服务器可以主动向客户端推送资源,减少延迟。
    • 流优先级(Stream Prioritization):客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求
  • 性能瓶颈
    • 仍然基于 TCP 协议,TCP 的拥塞控制和丢包重传机制可能导致性能下降。HTTP/2.0解决了应用层的队头阻塞,但是仍然存在传输层的队头阻塞。

4. HTTP/3.0

  • 发布时间:2022 年(正式标准化)
  • 特点
    • 基于 QUIC 协议:使用 UDP 代替 TCP,解决了 TCP 的队头阻塞问题。
      • 独立流:QUIC 为每个流(Stream)提供独立的可靠性保证,即使某个流的数据包丢失,也不会影响其他流的传输。
      • 无队头阻塞:由于流之间相互独立,丢包只会影响丢失的流,而不会阻塞其他流的数据传输。
      • 快速重传:QUIC 内置了更高效的重传机制,减少了丢包对性能的影响。
    • 0-RTT 连接:支持快速建立连接,减少握手延迟。
    • 内置加密:QUIC 协议默认使用 TLS 1.3,安全性更高。
    • 多路复用:在 QUIC 协议上实现多路复用,进一步优化性能。
    • 连接迁移:当客户端 IP 地址变化时,连接可以无缝迁移,无需重新建立。
  • 优势
    • 解决了 TCP 的性能瓶颈,特别适合高延迟、高丢包的网络环境。
    • 提供了更低的延迟和更高的吞吐量。

对比总结

特性HTTP/1.0HTTP/1.1HTTP/2.0HTTP/3.0
连接方式短连接(默认)长连接(默认)长连接基于 QUIC 的长连接
协议类型文本协议文本协议二进制协议基于 UDP 的二进制协议
多路复用不支持不支持(管道化有限)支持支持
头部压缩不支持不支持HPACK 压缩QPACK 压缩
服务器推送不支持不支持支持支持
队头阻塞存在存在存在(TCP 层)不存在(基于 QUIC)
加密不支持不支持(需 HTTPS)不支持(需 HTTPS)默认加密(TLS 1.3)
连接建立速度较慢较快极快(0-RTT)
适用场景简单场景通用场景高性能场景高延迟、高丢包场景

选择建议

  • HTTP/1.1:适合兼容性要求高的场景,几乎所有设备和服务器都支持。
  • HTTP/2.0:适合现代 Web 应用,能够显著提升性能。
  • HTTP/3.0:适合高延迟、高丢包的网络环境(如移动网络),或对延迟要求极高的应用(如实时通信)。