用 Chrome DevTools 152 安全重送代理請求

Chrome for Developers 於 2026 年 8 月 25 日公布:Chrome 152 DevTools 的網路面板把原本的 Replay XHR 改為 Resend。新功能不只支援 XHR,也能重送其他可擷取的網路請求,並將一般請求轉換成 fetch() 呼叫,同時保留較完整的重放語意。請求 Payload 面板也新增 Base64、Hex 與 UTF-8 三種二進位或壓縮載荷檢視方式。

這些能力可以縮短代理除錯時間,但「按一下重送」也可能重複建立訂單、沿用失效的瀏覽器憑證,或把敏感請求本文送進除錯環境。因此,專業測試必須在保留網路證據的同時嚴格控制副作用。

藍曬世界網路中的銅色網際網路線路經過受控代理閘道

請求重送能夠證明什麼

當原始瀏覽器請求出現以下代理相關現象時,受控重送特別有用:

  • 回傳 407 Proxy Authentication Required
  • 目標站尚未回應,連線或 TLS 階段已失敗;
  • 出口地區、ASN 或出口 IP 與預期不符;
  • 收到 4034295xx,但尚未確定來自代理還是目標站;
  • 二進位或壓縮請求本文格式異常,上游服務無法解析;
  • 同一請求在瀏覽器外成功,卻因瀏覽器標頭、Cookie 或來源規則而失敗。

重送可驗證同一個瀏覽器脈絡是否再次出現相同結果,但不能單獨證明代理有問題。DevTools 位於多個傳輸決策之上,重送的 fetch() 仍可能繼承目前頁面的 Cookie、Service Worker、連線重用、DNS 狀態及瀏覽器政策。

先建立安全測試邊界

開啟網路面板前,先寫明允許存取的目標、測試帳號、代理閘道、地區及最大請求次數。優先使用預備環境端點或無副作用的唯讀請求。

重送前依請求類型判斷:

請求類型預設決定必要控制
無副作用的 GETHEAD授權環境通常可重送確認查詢參數不含一次性動作
搜尋、預覽或驗證類 POST先人工複核使用測試資料並限制次數
建立、購買、付款、訊息或上傳不得原樣重送改用沙箱端點或明確具備防重複機制的測試路徑
登入、權杖更新、密碼或同意操作高風險使用專用測試身分,並輪替任何暴露的密鑰
二進位或壓縮上傳高風險只檢查結構,不匯出含有秘密的原始載荷

如果無法說明請求的副作用,就不要點選 Resend

在不暴露秘密的情況下記錄原請求

開啟 DevTools 的 Network,只有在必須跨頁導覽時才啟用 Preserve log,然後只重現一次已獲授權的失敗。記錄請求編號、UTC 時間、方法、目標主機、狀態、發起者、代理地區及瀏覽器版本。

檢查標頭與載荷時,複製或分享前必須移除:

  • AuthorizationProxy-Authorization
  • Cookie 與防 CSRF 權杖;
  • API Key、簽章 URL、工作階段 ID 與 Bearer Token;
  • 電子郵件、客戶識別碼及其他個人資料;
  • 多部分上傳檔案內容及二進位本文;
  • 與診斷無關的內部主機名稱。

若需證明兩次請求使用同一憑證,可保存加鹽指紋,不得把憑證本身放入工單、聊天、截圖或 Airtable。

準備三個對照組

一次重送不是診斷。至少準備三個可比較的嘗試:

  1. 原始對照: 原瀏覽器脈絡中的失敗請求。
  2. 不變重送: 不主動修改任何內容,只重送一次。
  3. 單一變數測試: 只調整一個已核准因素,例如代理地區、代理憑證參照、逾時或非敏感應用程式標頭。

除非它本身就是測試變數,否則目標、方法、本文、瀏覽器設定及測試帳號必須保持不變。若同時更換代理、User-Agent、Cookie 與載荷,即使成功也無法定位真正原因。

在 Chrome 152 中重送

先確認目前 DevTools 的網路請求右鍵選單已出現 Resend。不同 Chrome 頻道及企業發布政策可能使功能到達時間不同。

  1. 依準確主機與方法篩選網路面板。
  2. 選取原請求,記錄請求編號與執行脈絡。
  3. 再次確認請求方法與副作用等級。
  4. 按右鍵選擇 Resend,只執行一次。
  5. 不要平行重送,等待回應或預設逾時。
  6. 比較狀態、遠端位址、各階段耗時、發起者、回應標頭與回應大小。
  7. 記錄不變重送後,再執行單一變數測試。

如果原請求不是 XHR,Chrome 152 可能把重送呈現為 fetch() 呼叫。執行脈絡與主控台發起來源都是證據,必須一併記錄。

檢查二進位載荷而不是猜測

Chrome 152 在請求 Payload 中為二進位與壓縮本文提供 Base64、Hex 與 UTF-8 解碼。應依問題選擇檢視方式:

  • Hex: 檢查魔術位元組、分隔符號、長度與異常位元組變化;
  • Base64: 進行適合傳輸的比較或產生指紋;
  • UTF-8: 僅在預期內容確實為文字時使用。

能顯示 UTF-8 不代表整個本文都是文字。除非應用程式團隊提供準確編碼器及可防重複的端點,否則不要修改壓縮位元組後直接重送。比較時可在本機計算原始與重送載荷的雜湊,只記錄雜湊、位元組長度、內容類型及編碼。

區分代理故障與目標站故障

觀察結果可能層級下一項檢查
目標站標頭出現前回傳 407代理驗證憑證範圍、驗證方式、閘道政策
代理 TLS 或憑證錯誤瀏覽器到代理的傳輸信任鏈、主機名稱、檢查政策、系統時間
沒有目標回應便連線逾時網路或代理路徑DNS、閘道可達性、IPv4/IPv6、飽和度
帶有目標站回應標頭的 403目標政策或應用程式授權、瀏覽器狀態、目標規則
帶有限流標頭的 429目標站限流停止重送、遵守等待時間、降低速率
直連與代理對照結果相同大多不是代理特有問題應用程式載荷、帳號、來源、Service Worker
只有已預熱分頁的重送成功依賴瀏覽器狀態Cookie、連線快取、Service Worker、權杖時效

收到 429 後不得加快輪換 IP。限流回應是控制訊號,不是繞過目標限制的許可。

驗證請求確實走了目標路徑

只看到 200 還不夠,還要確認:

  • 使用預期的代理閘道與地區;
  • 遠端位址或合規出口證據符合預期;
  • 代理失敗後沒有靜默直連;
  • DNS 政策符合工作流程要求;
  • 沒有意外的 Service Worker 攔截;
  • 憑證與 TLS 證據一致;
  • 憑證沒有進入頁面或主控台輸出。

若瀏覽器工具無法展示完整代理跳點,可用請求時間戳與去識別化後的代理端日誌關聯。關聯 ID 必須是新產生且不包含客戶資料的值。

定義通過、失敗與無法判斷

只有在請求透過已驗證的代理路徑取得預期回應,且負面測試能夠安全失敗時,才能標記為通過。相同授權請求持續在已識別層級失敗時標記為失敗。如果瀏覽器狀態改變、目標不可用、路徑無法核實,或重送機制改變了關鍵行為,應標記為無法判斷

證據紀錄應包含:

  • 瀏覽器與 DevTools 版本;
  • 請求編號與 UTC 時間;
  • 去識別化後的方法、主機、狀態與耗時摘要;
  • 代理閘道標籤、地區及路徑驗證結果;
  • 原請求、不變重送及單一變數測試結果;
  • 必要時的載荷雜湊與位元組長度;
  • 副作用複核、負責人、結論及下一步。

發布前檢查清單

  • [ ] 目標、測試身分、代理、地區與請求上限均已獲授權。
  • [ ] 請求無副作用,或已轉入具備防重複機制的沙箱。
  • [ ] 憑證、Cookie、權杖、個人資料及檔案本文均已去識別化。
  • [ ] 修改任何變數前已記錄原請求。
  • [ ] 先完成不變重送,再進行單一變數測試。
  • [ ] 沒有建立並行重送或自動重試迴圈。
  • [ ] 407、TLS、逾時、403429 與應用程式錯誤已依層級歸因。
  • [ ] 已驗證代理路徑,且不存在直連回退。
  • [ ] 二進位比較只保留雜湊與長度,不保留敏感本文。
  • [ ] 通過、失敗或無法判斷都有可重現證據支援。

相關除錯可繼續閱讀 98IP 的代理 407 驗證故障指南代理診斷檔案去識別化指南,以及區分代理故障與目標限流的方法

常見問題

Resend 會逐位元組還原線上請求嗎?

不一定。Chrome 152 會把可擷取請求轉換成 fetch() 呼叫。連線重用、自動產生的標頭、Cookie、Service Worker 及瀏覽器政策仍可能改變線上位元組表現,所以它是受控瀏覽器證據,不是逐封包產生器。

可以重送一次失敗的付款或訂單請求嗎?

除非應用程式具備明確的冪等機制且測試已獲授權,否則不要對正式環境端點這樣做。應優先使用沙箱測試身分,並在重送前核實冪等鍵。

為什麼沒有修改代理,重送卻成功了?

第一次可能受到失效連線、冷 DNS、過期權杖、Service Worker 切換或目標短暫異常影響。只能在受控次數內繼續驗證,並比較耗時與執行脈絡,不能直接宣告故障已修復。

應該把二進位載荷匯出給其他工程師嗎?

只有在政策允許且內容完成審核與去識別化時才可以。通常提供雜湊、位元組長度、內容類型、編碼及最小去識別化片段就足夠。

合規說明

只重送已獲授權的請求、帳號、代理、目標與資料。遵守目標條款、隱私要求、速率限制、同意規則、資料最小化政策及地區法律。不得重送可能製造重複交易、洩漏憑證、形成無效流量或繞過存取控制的操作。

研究說明:Chrome for Developers 於 2026 年 8 月 25 日發布《What's new in DevTools (Chrome 152)》。外部研究地址只保存在內部營運紀錄中。