在代理回應結構漂移污染資料集之前發現它

代理請求即使回傳 200 OK,仍可能污染資料集:目標變更欄位名稱、依地區回傳不同頁面、用 HTML 攔截頁取代 JSON、刪除巢狀物件,或把數值改成字串。若蒐集器把傳輸成功當成資料成功,錯誤會進入分析、定價模型和業務決策。
本指南適用於合法且獲授權的資料蒐集、市場研究、廣告驗證與本地化測試。它把網路健康與內容正確性分開,辨識真實結構變更,又不過度回應無害變體,並在不確定記錄進入正式表格前隔離。
分開四類失敗
- 傳輸失敗:DNS、代理驗證、通道、TLS、逾時或連線錯誤。
- HTTP 政策結果:重新導向、驗證挑戰、限速、拒絕或服務錯誤。
- 表示不符:
Content-Type、編碼、地區、模板或正文特徵不符預期。 - 結構不符:表示類型正確,但必要欄位、類型、範圍或欄位關係改變。
這些情況需要不同處理。目標介面將 price 改為 amount 時,輪換出口無法修好解析器;重試只會增加費用並複製同一份錯誤資料。
從已驗收樣本定義契約
為每個重要分組保留少量已審核、獲准使用的回應:目標端點、地區與語言、代理類型和工作階段模式、桌面/行動/API 用戶端、公開或驗證流程、成功與已知非成功模板。
保留前刪除秘密和非必要個人資料,並為樣本設定契約版本與核准日期。不要強迫所有地區使用過寬的單一結構;德國與美國頁面可以有不同欄位,同時滿足相同業務目標。
同時定義結構與語意閘門:結構規則確認形狀和類型,語意規則確認資料對業務合理。
解析前先驗證表示
先檢查狀態與最終目標、Content-Type 和字元集、Content-Encoding 解碼結果、正文長度邊界、地區與語言標記、穩定內容特徵,以及已知攔截、錯誤與挑戰模板,再呼叫 JSON 或 HTML 解析器。
不能只看狀態碼。存取提示頁可能回傳成功狀態,JSON 端點也可能回傳可正常解析的錯誤物件。
回應標頭只依允許清單記錄。除非確有必要、取得許可且受到保護,否則不保存代理憑證、Cookie、授權值、完整查詢字串或正文。
JSON Schema 管結構,不代表業務真相
對 JSON 回應宣告明確的 JSON Schema 方言並驗證每個實例。Draft 2020-12 區分核心與驗證詞彙,可約束類型、必要屬性、陣列形態、數值範圍和條件組合。
初始契約可要求物件必須包含 item_id、observed_at、currency 與 amount;識別碼與貨幣為字串,金額為數值。探索期間可允許額外欄位,避免無害新欄位讓整條管線停止;下游依賴的必要欄位和類型則應嚴格。
Schema 驗證無法證明金額屬於正確商品、地區或時間。還需加入貨幣與市場匹配、非負範圍、時間新鮮度、識別碼格式與跨欄位一致性規則。
HTML 使用多層訊號
HTML 比 JSON 更容易變動,不應把單一 CSS 選擇器當成完整契約。組合頁面類別特徵、必要容器、兩個以上獨立欄位選擇器、語言標記、記錄數量邊界、穩定區域摘要,以及對同意、登入、挑戰和錯誤模板的明確偵測。
不要依賴廣告位置、隨機 ID 或輪換推薦內容。產生摘要前先標準化易變屬性。可參考代理回應完整性測試比較正文而不保留非必要內容。
建立分組基準
依地區、語言、端點、用戶端類型與工作階段策略分別計算漂移,持續追蹤驗證通過率、缺少必要欄位、類型變更、新增或刪除選用欄位、未知模板、內容類型不符、空正文或截斷、數值分布變化,以及首次與重試後結果。
在許可範圍內建立直連或受控路線基準。若所有路線同時出現新欄位,多半是目標變更;若只有特定代理分組出現攔截頁,更可能是路由、工作階段或政策差異。
先隔離再重試
不確定記錄不得寫入正式資料集。隔離事件只保存操作與嘗試 ID、契約版本、分組、失敗類別、規則 ID、內容類型、安全正文摘要、狀態、代理路線別名與時間。只有政策允許且診斷必要時,才保存最小遮蔽樣本,並限制存取與保留時間。
只有故障可能短暫且操作可安全重播時才重試。逾時或暫時服務錯誤可進行一次有限重試;穩定缺欄位或類型變更需要審核,不能靠輪換路線解決。不得為規避拒絕而切換 IP。
用灰度管線確認變更
讓新契約與現行契約在少量已授權樣本上並行,分類為相容新增欄位、已知地區變體、破壞性結構變更、語意變更、政策回應或蒐集器缺陷。
只有代表性分組通過,且下游使用者確認相容後,才能提升新契約。保留舊契約用於比較,但不要為了讓管線顯示正常而靜默強制轉換未知值。
使用代理回應新鮮度指南辨識結構正確但內容陳舊的回應;使用請求標頭完整性測試定位由意外用戶端標頭觸發的頁面變體。
設定可執行閾值
- 憑證或禁止資料洩漏:立即停止;
- 跨地區或跨租戶混合:立即停止;
- 必要識別碼缺失:隔離並通知負責人;
- 數值類型變更:隔離並阻止下游計算;
- 新增選用欄位:觀察並批次審核;
- 已知語言變體:依對應分組契約接受;
- 未知模板超過小閾值:暫停受影響分組;
- 直連與代理基準同時廣泛變動:啟動目標變更審核。
告警應定位最小受影響分組。一個地區變體不應讓所有地區停止,也不能抹除診斷證據。
結構漂移檢查清單
- [ ] 資料蒐集與樣本保留已獲授權。
- [ ] 傳輸、HTTP 政策、表示與結構失敗已分開。
- [ ] 每個結構契約都有版本與核准日期。
- [ ] 地區、語言、端點與用戶端分組獨立。
- [ ] 解析前驗證內容類型和解碼。
- [ ] JSON 結構與業務語意規則分離。
- [ ] HTML 使用多層訊號,而非單一選擇器。
- [ ] 未知結果先進入隔離區。
- [ ] 僅對可能短暫的故障進行有限重試。
- [ ] 許可範圍內比較直連與代理基準。
- [ ] 契約變更經過灰度與下游審核。
- [ ] 日誌與樣本不含秘密和非必要個人資料。
常見問題
新增選用欄位一定是結構漂移嗎?
它是結構變更,但不一定破壞相容性。記錄並衡量範圍;若使用者不受影響,可更新文件而不阻斷管線。
additionalProperties 應設為 false 嗎?
只有契約確實禁止未知屬性且阻斷成本合理時才如此。探索期間允許額外欄位、嚴格限制必要欄位通常更安全。
輪換代理能修復結構失敗嗎?
通常不能。輪換可顯示地區差異,卻無法修復真實契約變更,也不得用於規避存取控制。
不保存完整回應如何驗證?
保存規則結果、安全摘要、詮釋資料與最小遮蔽樣本。只有授權、必要性、安全與保留政策都允許時才保留完整承載資料。
何時應自動停止蒐集?
憑證洩漏、跨租戶或跨地區混合、禁止資料、廣泛未知模板,或任何讓下游計算不安全的變更都應觸發停止。
合規說明
只蒐集和驗證獲准存取與保留的資料。遵守目標條款、適用的 robots 指示、速率限制、隱私義務與地區法律。不得使用代理輪換或重試規避拒絕。最小化樣本,保護隔離區,並依書面保留政策刪除診斷資料。
內部研究資料:JSON Schema Draft 2020-12 Core 與 Validation 規範(2022 年 6 月);IETF《HTTP Semantics》(2022 年 6 月)。