假設我們有一個創建和更新會議室預訂的Web服務。更新可以改變預訂的各個方面,例如時間和房間號碼。處理由重複的POST請求導致的副作用
假設用戶與服務的網絡連接可能不可靠(例如移動網絡),並且兩個用戶A和B嘗試按順序更新相同的預訂。
用戶A發送POST請求將會議時間更改爲2pm,請求到達服務器,服務器成功處理請求。但是,由於網絡連接,返回給用戶A的響應丟失,並且用戶A認爲請求失敗。
在用戶A再次嘗試之前,用戶B發送她的請求將會議時間更改爲下午2:30,併成功並響應用戶B.
現在用戶A再次(可能是自動)重新發送相同的請求,這次請求和響應都成功了,沒有問題。換句話說,會議時間改回到下午2點。
在上面的假設情況下,用戶A的重複請求會導致用戶B的請求被覆蓋,並導致服務器端的狀態不正確。
一個可能的但天真的解決方案是爲客戶端上的每個請求設置一個ID,並且如果簡單地重新嘗試/重新發送請求,則該ID不會改變。然後在服務器端,服務器維護一組收到的請求ID並檢查重複項。
有什麼更好的技術或方法來解決這個問題?
看看PRG(http://en.wikipedia.org/wiki/Post/Redirect/Get)可以幫助你。 –