HTTP/3 概觀
警告
雖然 HTTP/3 **下游支援被認為已準備好用於生產環境**,但仍在持續改進中,相關追蹤請參考 area-quic 標籤。
HTTP/3 上游支援為 Alpha 版本 - 關鍵功能已實作,但尚未大規模測試。
HTTP/3 下游
可以透過新增 quic_options、確保下游傳輸層 Socket 為 QuicDownstreamTransport 並將編碼器設定為 HTTP/3 來啟用下游 Envoy HTTP/3 支援。
注意
HTTP/3 尚不支援熱重新啟動的正常處理。
提示
請參閱 下游 HTTP/3 設定 以取得設定範例。
此範例設定包含 TCP 和 UDP 監聽器,並且 TCP 監聽器會透過 alt-svc
標頭宣告 HTTP/3 支援。
預設情況下,此範例設定使用核心 UDP 支援,但**對於生產環境效能,如果 Envoy 以多個 worker 執行緒執行,強烈建議使用** BPF。
HTTP/3 宣告
對於明確設定 HTTP/3 的內部部署而言,宣告 HTTP/3 並非必要,但對於以 TCP 作為預設的網路對外部署而言是必要的,而且 Chrome 等客戶端只會在明確宣告時才會嘗試使用 HTTP/3。
BPF 使用
如果設定了多個 worker 執行緒,Envoy 預設會嘗試在 Linux 上使用 BPF,但可能需要 root 權限,或至少需要具有權限的 sudo
(例如 sudo setcap cap_bpf+ep
)。
如果設定了多個 worker 執行緒,且平台不支援 BPF,或嘗試使用失敗,Envoy 會在啟動時記錄警告。
下游統計資訊
建議監控一些 UDP 監聽器和 QUIC 連線統計資訊
- UDP 監聽器 downstream_rx_datagram_dropped
非零值表示核心的 UDP 監聽 Socket 的接收緩衝區不夠大。在 Linux 中,可以透過在監聽器的 socket_options 中設定
SOL_SOCKET
層級的預先綁定 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 連線,並使用先建立的連線。