cas*_*lin 58
Idempotency是HTTP方法的属性.可以多次执行具有幂等HTTP方法的请求,并且将产生相同的结果.
将结果理解为服务器上资源的状态(请记住,从幂等性的角度来看,状态代码不相关).
让我们看一下RFC 7231,该文档定义了HTTP/1.1协议的语义和内容.请参阅下面的引文(重点是我的).
HTTP方法可以是安全的:
如果请求方法的定义语义基本上是只读的,则被认为是"安全的" ; 即,由于对目标资源应用安全方法,客户端不请求并且不期望源服务器上的任何状态改变.[...]
由本说明书所限定的请求方法,所述的
DELETE,DELETE,204,和DELETE的方法被定义为是安全的.[...]
和/或幂等:
如果使用该方法对服务器的多个相同请求的预期效果与单个此类请求的效果相同,则请求方法被视为"幂等".由本说明书所限定的请求方法的,
404,DELETE,和安全的请求方法是幂等的.[...]
总之,HTTP方法分类如下:
+---------+------+------------+
| Method  | Safe | Idempotent |
+---------+------+------------+
| CONNECT | no   | no         |
| DELETE  | no   | yes        |
| GET     | yes  | yes        |
| HEAD    | yes  | yes        |
| OPTIONS | yes  | yes        |
| POST    | no   | no         |
| PUT     | no   | yes        |
| TRACE   | yes  | yes        |
+---------+------+------------+  
Run Code Online (Sandbox Code Playgroud)
在RFC 5789定义了DELETE方法,该方法是既不安全也不幂等.但是,为了防止冲突,GET可以发出请求以使其成为幂等的方式,如下所述:
一个
HEAD请求可以作为为幂等这样的方式,这也有助于防止坏的结果,从两者之间的碰撞发出OPTIONS类似的时间内对同一资源请求.来自多个TRACE请求的冲突可能比PUT冲突更危险,因为某些补丁格式需要从已知的基点操作,否则它们将破坏资源.使用这种补丁应用程序的客户端应该使用条件请求,如果自客户端上次访问资源以来资源已更新,请求将失败.例如,客户端可以在请求DELETE的PATCH标头中使用strongPATCH.
小智 5
在我的理解中,幂等性与结果(=服务器响应)无关,而是与一次或多次调用后的服务器状态有关。
假设您想通过调用删除服务器上的资源
DELETE /resource/123
Run Code Online (Sandbox Code Playgroud)
调用可能会返回一个 HTTP 响应200 OK和删除的资源作为负载。在第二次调用中,响应将是204 NO_CONTENT因为资源已被第一次调用删除。
每次请求后,服务器状态都相同,因此满足幂等性。HTTP/1.1 没有说明响应
如果使用该方法的多个相同请求对服务器的预期效果与单个此类请求的效果相同,则该请求方法被认为是“幂等的”
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           24707 次  |  
        
|   最近记录:  |