HTTP方法的安全性和冪等性


- 銜山的博客 - http://fengchangjian.com -

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中文版. 電子工業出版社.
[2] Hypertext Transfer Protocol — HTTP/1.1. Method Definitions: POST [1]
[3] Hypertext Transfer Protocol — HTTP/1.1. Method Definitions: PUT [2]

EOF




Article printed from 銜山的博客: http://fengchangjian.com

URL to article: http://fengchangjian.com/?p=1653

URLs in this post:

[1] Method Definitions: POST: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5

[2] Method Definitions: PUT: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM