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 连接,并将使用先建立连接的连接。

提示

请参阅 此处 以获取有关 HTTP/3 连接池的更多信息,包括有关 QUIC 何时使用的详细信息,以及在 QUIC 使用被配置为可选时如何回退到 TCP。

示例上游 HTTP/3 配置文件可以在 此处 找到。