HTTP/3 概述
警告
虽然 HTTP/3 **下游支持被认为已准备好投入生产使用**,但改进仍在进行中,并在 area-quic 标签中进行跟踪。
HTTP/3 上游支持处于 alpha 阶段 - 关键功能已实现,但尚未在规模化环境中进行测试。
HTTP/3 下游
可以通过添加 quic_options 来开启下游 Envoy HTTP/3 支持,确保下游传输套接字是 QuicDownstreamTransport,并将编解码器设置为 HTTP/3。
注意
热重启尚未针对 HTTP/3 进行优雅处理。
提示
请参阅 下游 HTTP/3 配置 以获取示例配置。
此示例配置包含 TCP 和 UDP 监听器,并且 TCP 监听器通过 alt-svc
标头广告 HTTP/3 支持。
默认情况下,示例配置使用内核 UDP 支持,但 **为了生产性能,强烈建议使用** BPF **,如果 Envoy 使用多个工作线程运行**。
HTTP/3 广告
在内部部署中,如果明确配置了 HTTP/3,则无需广告 HTTP/3,但在面向互联网的部署中,如果 TCP 是默认协议,并且客户端(如 Chrome)仅在明确广告 HTTP/3 时才会尝试使用 HTTP/3,则需要广告 HTTP/3。
BPF 使用
如果配置了多个工作线程,Envoy 将尝试在 Linux 上默认使用 BPF,但可能需要 root 权限,或者至少需要 sudo
权限(例如 sudo setcap cap_bpf+ep
)。
如果配置了多个工作线程,并且平台不支持 BPF,或者尝试使用 BPF 失败,Envoy 将在启动时记录警告。
下游统计信息
建议监控一些 UDP 监听器和 QUIC 连接统计信息
- UDP 监听器 downstream_rx_datagram_dropped
非零值意味着内核的 UDP 监听套接字的接收缓冲区不够大。在 Linux 中,可以通过监听器 socket_options 通过在
SOL_SOCKET
级别设置预绑定套接字选项SO_RCVBUF
来进行配置。- QUIC 连接错误代码和流重置错误代码
请参阅 quic_error_codes.h 以了解每个错误代码的含义。
HTTP/3 上游
HTTP/3 上游支持已实现,同时支持显式 HTTP/3(用于数据中心使用)和自动 HTTP/3(用于互联网使用)。
如果您身处 UDP 不太可能被阻止的受控环境中,则可以将其配置为 http_protocol_options 中的显式协议。
对于互联网使用,使用 auto_config 以及 http3_protocol_options 将导致 Envoy 尝试对那些通过 alt-svc
标头明确广告 HTTP/3 支持的端点使用 HTTP/3。
当使用 auto_config 以及 http3_protocol_options 时,Envoy 将尝试创建 QUIC 连接,然后如果在短时间延迟后 QUIC 握手未完成,将启动 TCP 连接,并将使用先建立连接的连接。