到处都说[看了很多文章] PUT是幂等的,这意味着具有相同输入的多个请求将产生与第一个请求相同的结果。
但是,如果我们使用POST方法将相同的请求和相同的输入放入同一请求,那么它将再次表现为PUT。
那么,PUT和POST在幂等方面有什么区别。
答案 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相同的副作用 请求与单个请求相同。'