http方法的安全性和冥等性
作为服务提供者必须具有安全性和冥等性
安全性是指多次调用下不会对资源产生副作用
冥等性是指 客户端可以重复调用并且期望同样的结果
HTTP方法的安全性和幂等性见下表:
方法名
| 安全性 | 幂等性 |
---|---|---|
GET | 是 | 是 |
HEAD |
是
|
是
|
OPTIONS | 是 | 是 |
DELETE | 否 | 是 |
PUT | 否 | 是 |
POST | 否 |
否
|
可以认为安全的方法都是只读的方法(GET, HEAD, OPTIONS),不会改变资源状态,显然,这三个方法也是幂等的。
而只有在DELETE,POST,PUT时候才会对资源产生副作用,所以这三个不具有安全性
然而HTTP协议规定DELETE方法是幂等的,每次删除该资源都要返回状态码200 OK,服务器端要实现幂等的DELETE方法,必须记录所有已删除资源的元数据(Metadata),否则,第二次删除后返回的响应码就会类似404 Not Found了。
PUT是修改特定资源所以也具有冥等性, 重复提交POST请求可能产生两个不同的资源,而重复提交PUT请求只会对其URL中指定的资源起作用,也就是只会创建一个资源。