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/2 | h2spec | 146 / 146 |
| HTTP/3 | h3spec | 49 / 49 |
| HTTP/2 | curl --http2 | 200 |
| HTTP/3 | curl --http3 | 200 |
| TLS 1.3 | curl -vk | 200 |
| IPv6 | curl [::1] | 200(Plain/TLS/H3) |
协议层之上是应用层。HTTP 请求最终收敛到
CanonicalRequest,由
Web 框架 处理。