如何稽核 HTTP/2 代理連線重用並避免租戶狀態混用

HTTP/2 可在一個持久連線中承載多個並行串流。使用 HTTP/2 代理時,要求可能重用到代理的同一條連線,而 CONNECT 把目標通道建立在獨立串流上。這能降低延遲與連線成本,也讓連線池成為安全和正確性邊界。
稽核必須證明:用戶端只重用相容連線、目標 authority 正確、租戶與認證狀態隔離,並能正確處理 421 Misdirected Request 與 GOAWAY。
映射連線身分
連線ID
串流ID
代理閘道別名
代理協定
代理認證設定別名
目標authority
TLS SNI
憑證設定別名
租戶別名
Cookie Jar別名
用戶端身分別名
位址家族
建立與最後使用時間
是否收到GOAWAY
回應類別
不得記錄代理密碼、Cookie、Token、原始用戶端憑證或客戶身分。
定義允許重用的鍵
至少考慮代理閘道、代理協定、代理認證設定、目標 authority、TLS 設定、用戶端憑證、租戶、隱私模式與網路命名空間。
不能只依代理主機與連接埠建立連線池。兩個租戶可使用同一閘道,但憑證、Cookie、目標政策及稽核邊界完全不同。只有全部相關屬性一致時,同一授權工作的多個串流才可安全共享連線。
分開三個層級
| 層級 | 共享物件 | 必須保留的證據 |
|---|---|---|
| 用戶端到代理 | HTTP/2 連線 | 閘道、TLS 與代理認證身分 |
| 代理 CONNECT | 串流與通道 | 目標主機、連接埠與政策 |
| 來源站要求 | 通道內 HTTP 串流 | authority、Cookie 與應用程式身分 |
單一代理連線不代表單一目標連線;CONNECT 成功也不證明來源站要求使用正確 authority 或工作階段狀態。
建立受控多工測試
只使用已授權代理與測試目標。準備兩個租戶別名、兩個受控來源站和不同的無害回應標記:
- 建立到核准代理的 HTTP/2 連線;
- 平行啟動租戶 A 到來源站 A、租戶 B 到來源站 B 的串流;
- 使用不同代理認證與應用程式狀態別名;
- 確認每個來源站只看到預期標記;
- 記錄串流是否共享用戶端到代理連線;
- 在一個串流完成後做順序要求;
- 在憑證輪換、DNS 變化與閒置後重複;
- 確認不相容要求會建立新連線或安全失敗。
通過條件是重用時仍正確隔離,而不是重用率最高。即使 HTTP 全部成功,狀態出現在錯誤來源站也是硬失敗。
驗證 authority 與憑證規則
只有伺服器對新來源站具有權威性時,才能跨來源站重用 HTTP/2 連線。HTTPS 還必須通過為該主機新建連線時應執行的憑證檢查。
測試正確的 :authority、TLS SNI 與 Host 語意。不得關閉憑證或主機名稱驗證來提高重用率。如果基礎架構依 SNI 路由,應同步驗證憑證與受控回應標記。
測試 421 復原
伺服器可用 421 Misdirected Request 拒絕某個 authority 的重用。用戶端應只在適合的新連線上重試受影響要求,並遵守嚴格預算。
- 不把 421 當成籠統代理品質問題;
- 不重放無關串流;
- 只在要求本文可安全重放時重試;
- 使用正確租戶及認證情境;
- 不立即為同一 authority 再選舊連線;
- 記錄重試次數與最終結果。
421 不應自動觸發代理出口輪換,它指向現有連線的路由或 authority 問題,不等於住宅 IP 信譽問題。
測試 GOAWAY 與部分完成
收到 GOAWAY 時,較早串流可能已完成,較新串流可能需要復原。先使用冪等實驗要求注入 GOAWAY,確認完成要求不重複、未處理要求遵守工作預算。非冪等操作必須有應用程式層冪等鍵或人工復原規則。
檢查連線池公平性
單一租戶不能占滿全部串流或連線。設定並測試每連線並行串流、每閘道連線數、排隊時間、工作截止時間與租戶份額。
監控有效結果、排隊延遲、首次成功率、421 比例、GOAWAY 復原、新連線率與重試放大。重用率高但尾端延遲或跨租戶排隊上升,仍是不健康最佳化。
生產檢查清單
- [ ] 已記錄並測試連線池重用鍵。
- [ ] 代理憑證參與相容性判斷。
- [ ] 租戶與 Cookie Jar 身分保持隔離。
- [ ] authority、SNI 與憑證檢查未削弱。
- [ ] CONNECT 串流映射正確目標。
- [ ] 受控回應標記證明後端身分。
- [ ] 421 在適合的新連線上復原。
- [ ] GOAWAY 不重複已完成工作。
- [ ] 非冪等要求有明確復原規則。
- [ ] 租戶級串流與佇列限制避免飢餓。
- [ ] 連線年齡、閒置時間和版本可觀測。
- [ ] 紀錄只含別名,不含憑證或 Cookie。
延伸閱讀 98IP 的住宅代理工作階段黏著性測試、代理容錯移轉復原演練和代理閘道 DNS 快取切換。
常見問題
HTTP/2 多工代表所有目標共享一條通道嗎?
不代表。到代理的一條 HTTP/2 連線可承載多個串流,每個 CONNECT 串流識別獨立目標。必須同時觀測實體連線與邏輯通道。
租戶不同是否總應新建連線?
憑證或狀態不同時,這是最安全的預設。只有實作能證明所有安全與政策屬性在串流層隔離時,才可共享。
停用重用能永久解決嗎?
可作為臨時診斷或止損,但會降低效能並增加連線負載。修正重用鍵與隔離控制後,再透過金絲雀恢復。
421 是否應觸發代理輪換?
不應。應在合適的新連線上重試受影響且可安全重放的要求,代理輪換應是獨立、有明確理由的路由決策。
合規說明
只使用已授權代理與測試來源站。遵守目標條款、速率限制與隱私要求,隔離客戶狀態,減少紀錄並保護認證材料;不得利用連線重用繞過來源站路由或存取決定。
內部資料說明:IETF RFC 9113《HTTP/2》,2022 年 6 月;curl 專案《libcurl API overview》與《CURLOPT_FORBID_REUSE》,2026 年 9 月 5 日查閱。