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_confighttp3_protocol_options 進行設定,將會導致 Envoy 嘗試對透過 alt-svc 標頭明確宣告 HTTP/3 支援的端點使用 HTTP/3。

當使用 auto_confighttp3_protocol_options 時,Envoy 會嘗試建立 QUIC 連線,如果 QUIC 交握在短暫延遲後仍未完成,則會啟動 TCP 連線,並使用先建立的連線。

提示

請參閱此處以取得有關 HTTP/3 連線集區的更多資訊,包括 QUIC 的使用位置,以及當 QUIC 使用設定為選用時如何故障轉移到 TCP 的詳細資訊。

可以在此處找到上游 HTTP/3 設定檔範例。