HTTP方法的安全性和冪等性

2022-04-05 11:55:09 字數 1545 閱讀 8610

- 銜山的部落格 -  -

http方法的安全性和冪等性

posted by 銜山 on 2012 年 05 月 26 日 @ 下午 5:43 in 計算機網路 | no comments

http協議規定了不同方法的安全特性和冪等特性,作為服務提供者的伺服器必需為客戶端提供這些特性。安全性,僅指該方法的多次呼叫不會產生***,不涉及傳統意義上的「安全」,這裡的***是指資源狀態。即,安全的方法不會修改資源狀態,儘管多次呼叫的返回值可能不一樣(被其他非安全方法修改過)。冪等性,是指該方法多次呼叫返回的效果(形式)一致,客戶端可以重複呼叫並且期望同樣的結果。冪等的含義類似於程式語言中的setter方法[1],一次呼叫和多次呼叫產生的效果是一致的,都是對乙個變數進行賦值。安全性和冪等性含義有些接近,容易搞混。

http方法的安全性和冪等性見下表:

方法名安全性

冪等性get是是

head是是

options是是

delete否是

put否

是post否否

可以認為安全的方法都是唯讀的方法(get, head, options),不會改變資源狀態,顯然,這三個方法也是冪等的。

delete方法的語義表示刪除伺服器上的乙個資源,第一次刪除成功後該資源就不存在了,資源狀態改變了,所以delete方法不具備安全特性。然而http協議規定delete方法是冪等的,每次刪除該資源都要返回狀態碼200 ok,伺服器端要實現冪等的delete方法,必須記錄所有已刪除資源的元資料(metadata),否則,第二次刪除後返回的響應碼就會類似404 not found了。

put和post方法語義中都有修改資源狀態的意思,因此都不是安全的。但是put方法是冪等的,post方法不是冪等的,這麼設計的理由是:

http協議規定,post方法修改資源狀態時,url指示的是該資源的父級資源,待修改資源的id資訊在請求體中攜帶[2]。而put方法修改資源狀態時,url直接指示待修改資源[2]。因此,同樣是建立資源,重複提交post請求可能產生兩個不同的資源,而重複提交put請求只會對其url中指定的資源起作用,也就是只會建立乙個資源。

references:

[1] subbu allamaraju著, 丁雪豐等譯. restful web services cookbook中文版. 電子工業出版社.

article printed from 銜山的部落格:

url to article:/?p=1653

urls in this post:

[1] method definitions: post:

[2] method definitions: put:

Http中的冪等性

理解restful的冪等性,並且設計符合冪等規範的高質量restful api。http冪等方法,是指無論呼叫多少次都不會有不同結果的 http 方法。不管你呼叫一次,還是呼叫一百次,一千次,結果都是相同的。例如 get tickets 獲取ticket列表 get tickets 12 檢視某個具...

理解http的冪等性

冪等性是什麼?冪等性 是系統的介面對外一種承諾 而不是實現 承諾只要呼叫介面成功,外部多次呼叫對系統的影響是一致的。乙個冪等的操作典型如 把編號為5的記錄的a欄位設定為0,這種操作不管執行多少次都是冪等的。乙個非冪等的操作典型如 把編號為5的記錄的a欄位增加1,這種操作顯然就不是冪等的。要做到冪等性...

冪等性和實現方法

冪等性和實現方法 tommwq.tech blog 如果乙個操作重複執行多次,其效果 不考慮操作時間 和只執行一次是一樣的,那麼這個操作就叫做是冪等 idempotent 的。乍看起來,冪等操作似乎沒什麼用處,畢竟只有第一次執行有效。但如果在系統設計中考慮到 失敗 場景的話,冪等操作是非常重要的。因...