HTTP的幂等性
冪等的概念:一個調用被發送多次所產生的副作用和被發送一次所產生的副作用是一樣的
而服務調用有三種結果:成功、失敗和超時。
解決超時的手段:1、超時后查詢調用結果
2、在被調用的服務中實現冪等性(在分布式系統中實現冪等性,需要實現全局 ID。)
HTTP的冪等性
HTTP GET 方法用于獲取資源,不應有副作用,所以是冪等的
HTTP HEAD 和 GET 本質是一樣的,區別在于 HEAD 不含有呈現數據,而僅僅是 HTTP頭信息,不應有副作用,也是冪等的
HTTP OPTIONS 主要用于獲取當前 URL 所支持的方法,所以也是冪等的
HTTP DELETE 方法用于刪除資源,有副作用,但它應該滿足冪等性
HTTP POST 方法用于創建資源,所對應的 URI 并非創建的資源本身,而是去執行創建動作的操作者,有副作用,不滿足冪等性
HTTP PUT 方法用于創建或更新操作,所對應的 URI 是要創建或更新的資源本身,有副作用,它應該滿足冪等性
對于 POST 的方法,很可能會出現多次提交的問題,對此一般的冪等性的設計如下:
1、首先,在表單中需要隱藏一個 token ,這個 token 可以是前端生成的一個唯一的 ID。用于防止用戶多次點擊了表單提交按鈕,而導致后端收到了多次請求,卻不能分辨是否是重復的提交。這個 token 是表單的唯一標識(這種情況其實是通過前端生成 ID 把 POST 變成了 PUT)
2、當用戶點擊提交后,后端會把用戶提交的數據和這個 token 保存在數據庫中。如果有重復提交,那么數據庫中的 token 會做排它限制,從而做到冪等性
3、當然,更為穩妥的做法是,后端成功向前端返回 302 跳轉,把用戶的前端頁跳轉到 GET 請求,把剛剛 POST 的數據給展示出來。如果是 Web 上的最好還把之前的表單設置成過期,這樣用戶不能通過瀏覽器后退按鈕來重新提交。這個模式又叫作 PRG模式 (Post/Redirect/Get)
參考:https://time.geekbang.org/column/article/4050
總結
- 上一篇: 【李宏毅机器学习2021】Task02
- 下一篇: 填充图案的边界线 插件_cad如何给填充