如何稽核 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 或工作階段狀態。

建立受控多工測試

只使用已授權代理與測試目標。準備兩個租戶別名、兩個受控來源站和不同的無害回應標記:

  1. 建立到核准代理的 HTTP/2 連線;
  2. 平行啟動租戶 A 到來源站 A、租戶 B 到來源站 B 的串流;
  3. 使用不同代理認證與應用程式狀態別名;
  4. 確認每個來源站只看到預期標記;
  5. 記錄串流是否共享用戶端到代理連線;
  6. 在一個串流完成後做順序要求;
  7. 在憑證輪換、DNS 變化與閒置後重複;
  8. 確認不相容要求會建立新連線或安全失敗。

通過條件是重用時仍正確隔離,而不是重用率最高。即使 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 日查閱。