2026 年 9 月 2 日發布的 curl 8.22.0 包含一項針對 HTTP 代理隧道的精確修正:位於分塊 CONNECT 回應末端的尾端欄位,現在會被正確識別為 CONNECT 中繼資料。應用程式要求隱藏代理 CONNECT 標頭時,這些欄位也能一致過濾,不再混入一般回應標頭輸出。

剪紙風網際網路隧道將代理中繼資料與目的地流量分開

這項變更範圍不大,卻關係到自動解析回應標頭的資料擷取、廣告驗證與代理用戶端。殘留的代理尾端欄位可能被誤認為目的地回應、污染保存的中繼資料,或破壞「回呼中只有一層回應」的解析假設。

來源:curl 專案,curl 8.22.0 發布說明及「proxy: CONNECT trailers handling」,發布日期 2026 年 9 月 2 日;底層變更日期 2026 年 8 月 27 日。

具體修正了什麼

HTTP 代理建立隧道時,用戶端先向代理傳送 CONNECT。代理的回應屬於隧道握手,並不是目的地最終回應。libcurl 的 CURLOPT_SUPPRESS_CONNECT_HEADERS 與 curl 工具的 --suppress-connect-headers 可阻止 CONNECT 回應標頭進入一般標頭或寫入輸出。

邊緣情況出現在代理使用分塊傳輸編碼回傳 CONNECT 回應,並於最後一個資料塊之後提供尾端欄位。修正前,分塊解析器會把這些欄位標示為 trailer 與 header,卻沒有同時標示為 CONNECT 資料,因此過濾器無法像處理其他代理握手欄位一樣將其移除。

curl 8.22.0 會把「目前位於 CONNECT 回應」的狀態明確傳入分塊解析器。此情境中的尾端欄位同時具有 header、trailer 與 CONNECT 屬性,既有抑制規則便能正確辨識。

這項修正不代表什麼

它不會改變目的地回應的尾端欄位、不會全域停用 trailer、不會從 verbose 或 trace 移除代理診斷,也不會改變代理驗證或隧道內的業務負載。它只是讓 CONNECT 回應尾端欄位遵循原本就適用於 CONNECT 回應標頭的抑制行為。

相關選項仍需主動啟用。官方文件說明,抑制作用於標頭與寫入輸出,不影響 verbose 和 trace。正式解析器可只收到乾淨的目的地回應,而維運人員仍能在受控除錯記錄中保留協定證據。

哪些團隊應優先測試

若工作負載符合下列多數特徵,應優先驗證:

  • 使用 HTTP 或 HTTPS 代理隧道;
  • 開啟 CONNECT 標頭抑制;
  • 透過標頭回呼、寫入回呼、--dump-header--show-headers 擷取回應;
  • 代理或閘道可能回傳分塊 CONNECT 回應;
  • 下游把標頭當作目的地證據處理;
  • 最近出現過來源不明的尾端欄位、重複標頭群組或解析失敗。

不經過 HTTP 代理隧道、不抑制 CONNECT 標頭,或從未收到分塊 CONNECT 回應的用戶端,通常不會觀察到這項差異。

安全的升級前後測試

使用已獲授權且能回傳帶尾端欄位之分塊 CONNECT 回應的預備代理。舊版與新版必須維持目的地、代理、curl 建置選項、請求、逾時和標頭擷取設定完全一致。

命令列測試可組合 --proxytunnel--dump-header--suppress-connect-headers,並把 verbose 或 trace 另外保存。libcurl 應啟用 CURLOPT_HTTPPROXYTUNNEL,把 CURLOPT_SUPPRESS_CONNECT_HEADERS 設為 1,並記錄標頭回呼實際收到的內容。

驗收條件如下:

  1. CONNECT 回應及其尾端欄位不進入應用程式標頭輸出。
  2. 目的地回應標頭仍只出現一次且順序正確。
  3. 目的地本文保持不變。
  4. 主動啟用的除錯通道仍保留診斷證據。
  5. 驗證、隧道建立與連線重用和基準一致。

共用記錄中不得使用正式憑證。代理使用者名稱、密碼、Cookie、授權欄位、目的地識別和個人資料都應遮蔽。

為何資料管線必須區分標頭歸屬

代理隧道至少包含兩層協定:代理 CONNECT 交換與目的地回應。可靠的資料擷取必須保存這個歸屬邊界,否則解析器可能把代理欄位寫入頁面證據、快取鍵或合規判斷,並和錯誤基準比較。

本次修正減少了一種歧義,但維運方仍應標記每個擷取欄位的所屬層。可參考代理回應分類指南代理 CONNECT 故障矩陣

升級檢查清單

  • 確認部署的二進位檔實際回報 curl 8.22.0 與預期 TLS 後端。
  • 找出所有啟用 CONNECT 標頭抑制的工作負載。
  • 確認標頭回呼與本文回呼是否寫入同一目的地。
  • 分別重現一般 CONNECT 與帶尾端欄位的分塊回應。
  • 比較應用程式標頭、除錯輸出、本文雜湊和結束狀態。
  • 確認 407 仍分類為代理驗證事件。
  • 檢查解析差異不會觸發額外重試。
  • 由小流量群組開始發布並監控解析失敗。
  • 觀察窗口結束前保留舊版二進位檔與設定。

更完整的 DNS、IPv4/IPv6、TLS、驗證與重用檢查,可使用curl 代理升級測試矩陣

常見問題

所有 HTTP 代理回應都會受影響嗎?

不會。被修正的是啟用 CONNECT 標頭抑制時,分塊 CONNECT 回應中的尾端欄位。一般目的地標頭與尾端欄位維持原有處理方式。

應用程式應停止記錄代理 CONNECT 資訊嗎?

不應該。請在受保護且已遮蔽敏感資料的 verbose 或 trace 通道保留證據。目標是避免代理握手中繼資料進入業務回應解析,而不是取消可觀測性。

只升級版本就夠了嗎?

不夠。作業系統與容器中的實際 curl 或 libcurl 版本可能不同於預期,必須核實部署二進位檔,並以正式環境等價的代理行為驗證回呼輸出。

合規說明

代理只能用於已獲授權的目的地和用途。請遵守法律、合約、目的地條款、速率限制、隱私及資料保留要求。標頭記錄可能包含憑證或個人資訊,應最小化蒐集、限制存取,並在分享前遮蔽。