PUT是幂等的?

时间:2018-10-24 08:39:08

标签: http post put

到处都说[看了很多文章] PUT是幂等的,这意味着具有相同输入的多个请求将产生与第一个请求相同的结果。

但是,如果我们使用POST方法将相同的请求和相同的输入放入同一请求,那么它将再次表现为PUT。

那么,PUT和POST在幂等方面有什么区别。

1 个答案:

答案 0 :(得分:1)

想法是POST和PUT之间应该有区别,而不是存在任何区别。为了阐明这一点,理想情况下,POST请求应创建一个新资源,而PUT请求应用于更新现有资源。因此,发送两个POST请求的客户端将创建两个资源,而两个PUT请求不会(或者不应该)引起任何不希望的更改。

更详细地讲,幂等性意味着在隔离的环境中,来自同一客户端的多个请求不会对资源状态产生任何影响。如果来自另一个客户端的请求更改了资源的状态,则它不会违反等幂原则。尽管,如果您确实要确保put请求不会最终被来自不同客户端的另一个并发请求覆盖,则您应该始终使用etags。详细地说,放置请求应始终提供最后一个资源状态的etag(从get请求获取),并且仅当etag是最新的时才应更新资源,否则应引发412(失败的前提条件)状态代码。在412的情况下,客户端应该再次获取资源,然后尝试更新。 REST认为,这对于防止比赛状况至关重要。

  

根据   W3C(http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html),

     

'方法还可以具有“等幂”属性,因为(   错误或有效期问题),N> 0相同的副作用   请求与单个请求相同。'