WebSocket 代理相容性測試:交握、心跳與故障復原

代理能載入一般 HTTPS 頁面,不代表能支援依賴 WebSocket 的瀏覽器工作流程。升級可能被拒絕,驗證可能只在首次連線有效,閒置通道可能靜默關閉,重連還可能改變地區與應用身分。

藍曬風格全球網際網路觀測站讓雙向心跳流經中央代理閘道並呈現受控重連路徑

本指南用於測試自有或明確獲准的 wss 端點,不能把頁面開啟成功誤判為 WebSocket 相容。不得對第三方即時系統執行未經許可的連線測試。

明確測試層次

RFC 6455 定義先執行 HTTP 開啟交握,再傳輸雙向訊息訊框;安全 WebSocket 還需先完成 TLS。代理路徑可在 DNS/路由、代理連線與驗證、TLS 與憑證、HTTP Upgrade、子協定、雙向訊框、心跳與閒置、關閉與重連等層次失敗。

記錄準確失敗層,不要只寫「WebSocket 失敗」。這決定應調整代理路由、應用設定、憑證信任或伺服器政策。

建立安全回顯夾具

受控端點應在升級後回傳連線別名,回顯用戶端序號與負載雜湊,依計畫發送伺服器訊息,支援已記錄子協定,可暫停輸出進行閒置測試,也能用指定關閉碼執行故障測試。日誌只保存去識別化時間與別名。

不得回顯憑證、Cookie、完整標頭或私人負載。測試文字與二進位內容必須是合成資料。

固定測試矩陣

分別涵蓋正式與下一瀏覽器版本、採購的 HTTP/HTTPS/SOCKS5 模式、關鍵地區、IPv4/IPv6/雙堆疊、新路由/黏性路由/重連、小型文字/中型二進位/分片訊息、不同閒置時長,以及正常、短暫斷線與代理拒絕。

比較路由時保持瀏覽器、端點與負載不變;比較瀏覽器版本時保持路由不變。

擷取開啟交握

記錄 DNS、代理連線、代理驗證輪次、TLS、升級耗時、升級狀態、選定子協定與擴充。有效成功必須同時滿足端點正確、憑證驗證、回傳 101,以及需要時選定正確子協定。一般 200 頁面不是 WebSocket 成功;代理 HTML 回應也不能當作應用資料。

RFC 6455 要求連線無法開啟或 TLS 驗證失敗時中止。不得關閉憑證驗證強迫通過。

分開測試代理與來源站驗證

依序測試有效代理憑證與有效工作階段、無效代理憑證、有效代理但應用工作階段過期、代理驗證後的連線重用,以及代理憑證輪替後的重連。錯誤代碼和提示應穩定可預測。

憑證不得進入 WebSocket URL、主控台、截圖或關閉原因。代理憑證輪替指南可驗證安全替換。

驗證雙向訊息訊框

升級後按受控速率發送帶序號的合成訊息,確認用戶端序號只確認一次、伺服器序號依應用預期到達、雜湊相符、文字維持 UTF-8、二進位長度與雜湊正確,且關閉或被取代的連線不再收到訊框。

TCP 保證位元組順序,但應用可能非同步處理或重試;連線正常不等於業務恰好執行一次。

Playwright 可觀察 WebSocket 開啟、訊框傳送/接收與關閉,也能路由和模擬 WebSocket。模擬測試必須與真實代理路徑分開,不能把本機模擬成功當作路由證據。

量測心跳與閒置存活

記錄心跳間隔、最後雙向訊息時間、閒置時長、斷線偵測時間與關閉類別。分別測試低於、接近和超過疑似逾時的時長,每種至少重複五次。穩定閾值關閉較像閒置政策;與負載相關的隨機關閉可能來自容量或端點。

代理閒置逾時與保活測試提供更完整方法。只有量測證明必要時才縮短心跳,否則會增加流量與連線壓力。

測試有限重連

分別製造伺服器關閉、短暫用戶端斷線和代理拒絕,驗證應用能在期限內偵測中斷,使用帶抖動的指數退避,具備最大次數與總時長預算,明確排隊訊息是否重播,舊新連線不能重複提交事件,並能辨識路由或地區變更。

代理重試風暴預防指南可避免大量連線同時重連。

驗證工作階段與地區一致性

應用可能把 WebSocket 工作階段綁定到登入、Cookie、地區或後端分片。代理於重連時輪替後,即使 TCP/TLS 成功,邏輯工作階段也可能遭拒絕。記錄預期代理工作階段別名、出口地區與應用連線別名,並分別測試黏性與主動輪替。

住宅代理工作階段黏性測試可區分穩定驗證工作階段與「IP 永不改變」的錯誤假設。

有意測試 IPv4 與 IPv6

若同時提供兩種位址族,記錄代理跳點與受控端點看到的路徑。分別測試強制 IPv4、強制 IPv6 和一般雙堆疊選擇。簡單瀏覽器測試中的自動回退可能掩蓋單一位址族故障。

統一故障分類

至少區分代理驗證、代理連線、TLS 驗證、升級拒絕、子協定、訊框完整性、閒置關閉、重連超限、工作階段綁定與端點故障。只有重複出現且明確屬於路由的證據才能觸發隔離。代理池隔離與復原指南提供可逆流程。

驗收門檻

可依業務設定升級成功率,但還需滿足:不使用憑證繞過、子協定正確、訊框無未知遺失或重複、p95 升級與訊息往返在預算內、閒置行為已知、重連受次數/時間/位元組限制、黏性與輪替符合產品定義,且故障分類在重複樣本中穩定。

門檻應來自業務需求,不能照抄最佳路由表現。

檢查清單

  • [ ] 已記錄端點所有權或測試許可。
  • [ ] 使用 wss 且保持憑證驗證。
  • [ ] 分開測試代理與來源站驗證。
  • [ ] 驗證 101 與所需子協定。
  • [ ] 檢查文字、二進位及伺服器主動訊框。
  • [ ] 負載為合成資料且日誌已去識別化。
  • [ ] 已量測閒置閾值與心跳成本。
  • [ ] 已測試伺服器關閉、斷線與代理拒絕。
  • [ ] 重連有抖動與有限預算。
  • [ ] 已理解黏性與輪替工作階段。
  • [ ] 已測試可用的 IPv4 與 IPv6 路徑。
  • [ ] 路由隔離需要重複的專屬證據。

常見問題

HTTPS 頁面成功是否證明支援 WebSocket?

不證明。代理還必須保留升級及應用需要的長期雙向連線行為。

應測試 ws 還是 wss

正式環境類測試應使用包含 TLS 驗證的 wssws 只能作為有限實驗對照。

閒置連線中斷一定是代理問題嗎?

不一定,伺服器、負載平衡器、瀏覽器、系統或網路都可能關閉它,必須透過受控路由重複驗證。

可以記錄所有訊息訊框嗎?

只記錄合成測試訊框。正式訊框可能含個人或機密資料,應優先記錄序號、大小、雜湊和時間。

合規說明

只對獲准系統與代理資源執行 WebSocket 測試,遵守速率限制與條款,最小化負載和日誌,保持 TLS 驗證,不得用本方法繞過存取控制或檢查第三方私人通訊。