PUT經代理回傳412 Precondition Failed,若直接刪條件或重送舊本文,可能顯示成功卻覆蓋別人剛存的修改。先釐清這次編輯允許替換的版本,才能分辨正常衝突與交付問題。

本方案僅供自有或明確授權API,分別查核版本拒絕、請求到達與安全復原。不因加入If-Match就假設目標支援,也不宣稱已實測或有代理效能結果。

兩份編輯從相同資源版本開始,第一份推進儲存版本,第二份舊編輯被版本檢查攔下待審,不覆寫新內容

一、確認條件更新契約

列明資源網址、表示、認證上下文、支援方法及驗證器政策。使用只有無害標記的專用測試資源,停用郵件、付款等後續作用。

MDN說明If-Match採強ETag比較,W/弱標籤無法滿足比較。驗證器原樣保留,包括引號,不能刪W/假造強標籤。

有文件化條件更新時,過期版本可由412拒絕。這不等於代理認證失敗,也不同於結果未知的逾時。API若用另一並行協定,應驗收該協定,不自行加標頭就當已有保護。

二、讀取並綁定原始版本

  1. 走核准路徑讀取專用資源,確認ID與標記。
  2. 記錄回應驗證器及編輯所需欄位的遮蔽快照。
  3. 同一紀錄綁定計畫修改、資源網址、表示與驗證器。
  4. 目標身分及相關設定不變,其他帳戶或資源標籤不能互換。
  5. 從相同快照準備無害而不同的編輯A與B。

勿從舊截圖或快取匯出推測目前標籤,需記取得時間及回應來源。只有弱標籤或沒有可用驗證器時,這個契約下的樣本應標不支援,再向目標負責人確認文件化替代。

三、以確定序列證明拒絕

A帶原始驗證器提交,取得契約成功回應後讀回,確認A標記與新版本。樣本必須真的改資源,無變更操作不適合驗證版本推進。

B再帶舊驗證器提交,本契約要求412,且讀回A狀態沒有遭B覆寫。拒絕碼本身不夠,若伺服器仍修改資源也屬失敗。

以伺服器案例紀錄確認收到的If-Match、方法、資源ID及本文標記。用戶端列印只證明意圖,不證明目的端評估內容。

四、驗證比較與寫入原子性

需並行寫入時,用自有測試閘門釋放兩份帶同一舊驗證器的不同編輯。這個版本變更樣本應僅接受一份、拒絕過期競爭者,並核對最終資源完整對應勝出者。

版本比較與修改需符合API原子契約。兩份相同舊版本替換都成功,可能順序測試通過但並行防覆寫失效,不能無接收及最終狀態證據就歸咎代理時序。

並行數和期限保持小型,這是正確性案例而非壓測。若沒達受控釋放條件就標未完成,不能宣稱通過競態測試。

五、復原先審內容,不只更新標籤

確認衝突後讀取目前資源,對照原快照與提案,保留其他寫入者變更。依明確業務規則合併;規則不足則由人工處理。

盲取新ETag搭配原封不動的舊替換本文,可能覆寫412剛保護的變更。新條件嘗試應基於新狀態審查,仍可能衝突,次數必須有限。

更新逾時結果未知時,先依目標回執或讀回政策查核。稍後412可能代表版本推進,但不證明誰修改或先前寫入成功;需比對實際意圖與授權伺服器證據。

六、相同契約比較代理路徑

核准基準及代理各使用獨立重設的測試資源,固定用戶端版本、資源契約及本文生成。不能拿基準已改過的資源直接測代理,應先重設並重取驗證器。

98IP動態住宅IP產品頁可協助了解授權API路徑測試產品,再以API設定頁確認接入及帳戶選項。代理不定義目的端原子更新,也不替代並行規則。

  • 目前驗證器與真實變更:契約成功且讀回正確。
  • A寫入後使用舊標籤:412並且無覆寫。
  • 弱或不支援標籤:明確不支援或拒絕,不刪標記。
  • 受控雙寫:原子保護阻止兩份過期替換同時成功。
  • 審查後復原:其他變更在新條件編輯後仍存在。
  • 回應未知:再寫前先讀回或查回執。

以上尚未執行。保存案例ID、路徑標籤、用戶端、資源ID、驗證器沿革、收到條件、回應、最終標記及首個落差。遮蔽秘密與客戶資料,只留區分衝突及交付失敗所需合成證據。

常見問題與完成清單

412代表代理故障嗎?不代表,舊版本樣本理應依契約拒絕。

拿掉If-Match算修復嗎?那會移除被測保護並改變操作,不算復原通過。

  • API確有條件及方法文件。
  • 驗證器對應正確資源及表示。
  • 拒絕需核對最終儲存狀態。
  • 必要時獨立驗證並行正確性。
  • 復原審查內容,不只替換驗證器。
  • 僅用授權測試寫入及無害樣本,嘗試有界,不宣稱未測可靠性收益。