如何測試代理鏈路中的 ALPN 與 HTTP 版本協商

HTTPS 請求取得正確頁面,不代表傳輸行為與直連相同。直連時協商 HTTP/2 的客戶端,經過某個代理閘道後可能靜默使用 HTTP/1.1;另一條路由可能在通道建立時失敗,或錯誤重複使用連線。即使狀態碼相同,這些差異仍會影響並行、標頭壓縮、延遲與錯誤處理。
本指南提供代理採購與維運可用的 ALPN 和 HTTP 版本受控稽核。只測試自有或獲准端點,目標是取得相容性證據,而非強迫目標接受不支援的協定。
ALPN 能說明什麼
應用層協定協商發生於 TLS 握手,用來約定 HTTP/2 或 HTTP/1.1。HTTP CONNECT 代理通常先建立通道,客戶端再於通道內和目標完成 TLS;SOCKS5 則在目標 TLS 前增加位址及 DNS 選擇。
應分別記錄客戶端提供的協定、目標選擇的協定,以及應用實際使用的 HTTP 版本。不可只靠回應標頭推斷,應保留客戶端連線證據,並由獲准來源端佐證。
建立直連基線
選擇同時支援 HTTP/2 和 HTTP/1.1 的自有 HTTPS 測試端點。從將執行代理測試的同一裝置、執行環境和信任庫重複直連,記錄測試編號、路由別名、客戶端、位址族、提供與選取的 ALPN、有效 HTTP 版本、TLS 版本、連線是否重複使用、首位元組時間及失敗階段。
日誌不可包含代理密碼、Cookie、授權標頭或權杖。回應加入隨機挑戰,避免把舊快取誤認為新測試。
建立路由矩陣
| 維度 | 分開測試的值 |
|---|---|
| 路徑 | 直連、閘道 A、閘道 B |
| 代理模式 | HTTP CONNECT、SOCKS5 |
| 位址族 | IPv4、IPv6 |
| 工作階段 | 固定、輪換 |
| ALPN 提供 | HTTP/2 加 HTTP/1.1、僅 HTTP/1.1 |
| 連線 | 新連線、受控重複使用 |
每個單元執行數次相同小請求,固定目標、負載、客戶端版本、密碼政策、逾時和網路位置。可結合多地區路由測試規範地區對照。
步驟一:分開證明通道建立
HTTP CONNECT 要區分代理驗證、通道建立、TLS 握手與應用回應。407 是代理驗證失敗;CONNECT 逾時不是 ALPN 失敗;通道完成後發生 TLS 警示,才屬於目標握手階段。
這能避免把所有 HTTP/2 失敗歸因於代理不支援,因為有些連線根本沒有進入目標 TLS。
步驟二:比較協商與實際協定
先讓客戶端同時提供 HTTP/2 及 HTTP/1.1,比較直連和代理結果;再強制 HTTP/1.1 作為對照。結果分為預期選擇、穩定降級、間歇降級、報告與來源端不一致,以及握手前失敗。
降級不一定是缺陷。但產品若承諾 HTTP/2、變化未被說明,或工作負載依賴多工處理,它就是採購風險。
步驟三:測試連線重複使用
在同一客戶端連線發送一組小請求,確認是否按預期共享。HTTP/2 應觀察串流並行與連線身分;HTTP/1.1 則要區分 keep-alive 與多個平行通訊端。
更換代理工作階段識別後重測。輪換出口不一定要求更換閘道連線,但策略必須明確。若依賴固定工作階段,可結合住宅代理工作階段固定性測試。
此時不要直接打滿並行。先在低負載證明協定正確,再利用代理並行飽和測試尋找容量邊界。
步驟四:測試受控失敗
在獲准端點製造沒有共同協定、延遲 TLS 握手、通道後關閉連線、僅支援 HTTP/1.1,以及 HTTP/2 單一串流重設等情況。客戶端應保留原始失敗階段,重試策略不得把確定性協商失敗擴大為重試風暴。
同時記錄重試使用新通道、新 TLS 工作階段或原連線。
謹慎解釋差異
歸因於代理前,確認目標沒有改變協定政策,直連與代理解析到同一獲准主機,客戶端沒有使用不同 TLS 程式庫或設定。檢查 IPv4、IPv6 是否到達不同邊緣,並跨多個閘道及第二個受控網路重複。
真正具決策價值的結果應可重現且與特定路由綁定。單一無法解釋的樣本需要調查,但不足以下定論。
採購評分
先設硬門檻:協定報告不得虛假;不可靜默繞過驗證;失敗階段必須可診斷;承諾的 HTTP/2 行為必須可重現;連線重複使用必須符合工作階段政策。
通過後,再評估協定選擇一致性、首位元組時間、成功率、重複使用效率、地區覆蓋和支援回應。對 HTTP/2 與 HTTP/1.1 分別計算每次成功請求成本,避免綜合平均掩蓋昂貴的降級路徑。
上線檢查清單
- 直連基線最新且可重現;
- 每個購買閘道和地區都有樣本;
- CONNECT、TLS 與 HTTP 失敗分開統計;
- 提供 ALPN、選取 ALPN 和有效 HTTP 版本都有記錄;
- IPv4 與 IPv6 不混合;
- 新連線及重複使用連線分開測試;
- 重試有上限並保留原始失敗;
- 證據沒有憑據或 Cookie;
- 相容回復路由已完成驗證。
常見問題
HTTP 代理必須和客戶端使用 HTTP/2 嗎?
不一定。CONNECT 先建立通道,客戶端再於通道內和目標協商 TLS。代理控制連線和通道內應用協定是不同問題。
降級 HTTP/1.1 一定不好嗎?
不一定。它可能是有效相容路徑,但要測量對延遲、並行、連線數及成本的影響是否超出需求。
一次成功能證明支援 HTTP/2 嗎?
不能。需要跨閘道、位址族和新連線重複,再驗證重複使用與受控串流錯誤。
瀏覽器與命令列客戶端要分開測嗎?
要。它們可能使用不同 TLS 堆疊、協定政策、連線池和代理設定路徑。
合規說明
僅對自有或明確獲准評估的系統與代理路由執行協定測試。遵守合約、目標政策、速率限制和隱私要求,不利用協商測試繞過存取控制,也不得在日誌洩露代理憑據或使用者資料。