小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
翻译自:
问题:HTTP 方法中 POST 和 PUT 的区别是什么呢?他们分别的适用场景是什么呢?
你可以在网上找到这样的断言:
- POST用于创建资源,PUT用于修改资源
- PUT应该用于创建资源,POST应该用于修改资源
其实两者都不完全正确。
更好的方法是根据动作的幂等性在 PUT 和 POST 之间进行选择。
下面我们首先会在这篇文章介绍 幂等性(Idempotence) 的概念,说明哪些 HTTP 方法是幂等的,然后在下一篇文章分别对PUT和POST进行分析,最后进行总结。
幂等性(Idempotence)
幂等性是 HTTP 方法的一种属性。
如果多个完全相同的请求和单个请求,在服务器上的预期效果相同的话,这个请求方法则被认为是幂等的。值得一提的是,幂等是对服务器的资源状态产生影响(即请求完成后服务端的状态),而不是客户端接收到的响应状态码。
为了说明这一点,考虑被定义为幂等的 DELETE
方法,比如客户端进行一个 DELETE
方法的请求,为了删除一个服务器上的资源,服务器处理这个请求,这个资源被删除,并且服务器返回了 204 的状态码。接着客户端重复发送同样的 DELETE
请求,因为这个资源已经被删除了,服务器返回 404。
尽管客户端接收到的状态码不同,但是对于同样一个 URI,单个 DELETE
请求和多个 DELETE
请求产生的效果相同。
最后,如果客户端在能够读取服务器的响应之前发生故障,幂等的请求可以被自动重试。客户端知道重复请求可以产生相同的预期结果,虽然它们的响应可能不同。
所以总结一下,幂等性的核心概念是 - 你可以多次发送请求,而无需对服务器状态做额外的更改。
那么哪些 HTTP 方法是幂等的呢?
安全方法(Safe Methods)
所有的 safe(安全)方法都是幂等的。
如果一个方法对于服务器来说是只读的,也就是说它不会对服务端的数据进行修改,那么它就是安全的。这些方法是安全的:GET
,HEAD
和 OPTIONS
参考:www.rfc-editor.org/rfc/rfc7231…
幂等方法(Idempotent Methods)
在正确实现的条件下, GET
, HEAD
, PUT
和 DELETE
等方法都是幂等的,而 POST
方法不是。所有的 safe 方法也都是幂等的。
参考:www.rfc-editor.org/rfc/rfc7231…
HTTP 方法总结
按照上面说的,HTTP 方法可以分为以下几种:
1 | yaml复制代码+---------+------+------------+ |
本文转载自: 掘金