🔐 HTTP 协议版本演进

从 HTTP/1.0 到 HTTP/3 的核心原理与性能对比

HTTP/1.0 1996
📋 请求/响应模型
Client: 建立 TCP 连接
GET /index.html HTTP/1.0
Host: example.com
[空行]
HTTP/1.0 200 OK
Content-Type: text/html
Content-Length: 1234
[空行]
[HTML内容]
关闭连接...
  • 支持 GET、POST、HEAD 等基本方法
  • 引入请求头/响应头机制
  • 支持多部分文档、MIME 类型
  • 状态码机制
  • 每个请求单独建立 TCP 连接
  • ⚠️ 核心问题:每次请求都需要三次握手,连接无法复用,导致延迟高
    1.0
    HTTP/1.1 1999
    🔄 持久连接 (Keep-Alive)
    Client: 建立 TCP 连接 (1次)
    GET /page.html HTTP/1.1
    200 OK + Content
    GET /style.css HTTP/1.1
    200 OK + Content
    GET /script.js HTTP/1.1
    200 OK + Content
    // 多个请求复用同一连接
  • 持久连接 (Keep-Alive) - 复用 TCP 连接
  • 管道化 (Pipelining) - 并行发送多个请求
  • 新增 PUT、DELETE、OPTIONS 等方法
  • 缓存控制 (Cache-Control, ETag)
  • 分块传输编码 (Chunked Transfer)
  • 虚拟主机支持 (Host 头)
  • ⚠️ 仍有问题:队头阻塞 (Head-of-Line Blocking) — 后续请求必须等待前面响应完成
    1.1
    HTTP/2 2015
    💡 核心突破:二进制分帧 + 多路复用
    Stream 1
    (HTML) HEADERS DATA HEADERS DATA
    Stream 2
    (CSS) HEADERS DATA
    Stream 3
    (JS) HEADERS DATA
  • 二进制分帧 - 将数据拆分为更小的帧,便于交错传输
  • 多路复用 - 单一 TCP 连接上并行多个 Stream
  • 流控 - 数据接收方控制发送速率
  • 服务器推送 - 服务端主动推送资源
  • 头部压缩 (HPACK) - 减少重复头部传输
  • 请求优先级 - 标记资源优先级
  • ⚠️ 仍存在问题:TCP 层仍存在队头阻塞,且 TCP 连接建立有握手延迟
    2
    HTTP/3 2022
    🚀 核心突破:基于 QUIC 协议,彻底解决 TCP 队头阻塞
    TCP + TLS + HTTP/2 VS QUIC + HTTP/3
    TCP
    传输层
    TLS 1.2/1.3
    安全层
    HTTP/2
    应用层
    ↓ 传统协议栈 (多层级) ↓
    QUIC
    传输+安全层 (合一)
    HTTP/3
    应用层
  • 基于 QUIC - UDP 上的可靠传输协议
  • 0-RTT / 1-RTT - 快速建立连接,减少握手延迟
  • 独立流控制 - 每个 Stream 独立,避免队头阻塞
  • 连接迁移 - 网络切换时保持连接 (通过连接 ID)
  • 内置 TLS 1.3 - 安全与传输一体化
  • 前向纠错 - 部分丢包可无需重传恢复
  • 3

    📊 版本对比总结

    特性 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
    连接模型 短连接 持久连接 多路复用 多路复用
    队头阻塞 严重 存在 TCP层
    连接复用 Keep-Alive Stream Stream
    头部压缩 HPACK QPACK
    服务器推送 支持 支持
    传输协议 TCP TCP TCP QUIC/UDP
    安全 可选 可选 可选 强制TLS
    连接建立 3-RTT 3-RTT 3-RTT 0-1 RTT