Tutorial · 05

协议实现

Zenith 原生实现 HTTP/1.1、HTTP/2、HTTP/3(QUIC) 与 TLS 1.3,全部通过真实进程级合规验证。

HTTP/1.1(RFC 7230)

zenith-http1 实现,主打热路径零堆分配与流式解析。

  • 流式解析,固定容量数组,避免热路径堆分配。
  • CRLF 注入拒绝:add_header 拒绝含 \r\n 的值。
  • Content-Length / Transfer-Encoding 二选一,杜绝歧义。
  • 请求走私防护:CL.TE / TE.CL / TE.TE 检测。
  • 强制 Host 头。

HTTP/2(RFC 7540)

zenith-http2 实现,支持流多路复用与 HPACK 压缩。

  • 帧解析、连接级状态机。
  • HPACK 头部压缩,动态表溢出受控。
  • 流量控制(窗口管理)。
  • Rapid Reset 攻击检测
合规验证:h2spec 146/146 通过;curl --http2 返回 200(TLS ALPN h2 协商成功)。

HTTP/3(RFC 9114)over QUIC(RFC 9000)

zenith-http3(应用层)+ zenith-net(QUIC 传输)实现,提供真实 QuicServer

  • QPACK 头部压缩,总字节上限防解压炸弹。
  • SETTINGS 协商、GOAWAY 关闭流程。
  • 控制流 / 请求流帧类型严格校验。
  • 优先级(RFC 9218)。
合规验证:h3spec 49/49 通过(IPv4 + IPv6);curl --http3 返回 200;外部 curl(nghttp3/ngtcp2)真实 QUIC 握手 + HTTP/3 200 + 连接复用。

TLS 1.3

zenith-tls 实现,基于 rustls + ring(唯一密码学后端)。

  • 双 Bank 证书代际热切换(CertManager)。
  • SNI / ALPN 路由。
  • 身份一致性:SNI ↔ Host ↔ :authority 四元一致,不一致 → 421。
  • JA3 / JA4 / JA4S / JA4O / JA4H 指纹采集。
  • 0-RTT 支持,默认 max_early_data_size=0 + 60s 重放窗口。
  • Fail-Closed:无证书绝不回退明文。
验证
curl -vk https://localhost:8443/ TLS_AES_256_GCM_SHA384 / X25519 / ALPN h2

QUIC 传输(RFC 9000)

zenith-net 提供真实 QUIC 传输层,支撑 HTTP/3。安全加固包括:

  • STOP_SENDING(0x05)独立解析。
  • CRYPTO 缓冲区限制 65536 字节。
  • HTTP/3 stream ID 取模在 u64 空间执行(32 位安全)。
  • Initial 保留位 Fixed Bit(0x40) 校验(RFC 9000 §17.2)。

合规性总结

协议工具结果
HTTP/2h2spec146 / 146
HTTP/3h3spec49 / 49
HTTP/2curl --http2200
HTTP/3curl --http3200
TLS 1.3curl -vk200
IPv6curl [::1]200(Plain/TLS/H3)
协议层之上是应用层。HTTP 请求最终收敛到 CanonicalRequest,由 Web 框架 处理。