HTTP 方法中 POST 和 PUT 的区别和适用场景是什

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

翻译自:

问题:HTTP 方法中 POST 和 PUT 的区别是什么呢?他们分别的适用场景是什么呢?

你可以在网上找到这样的断言:

  • POST用于创建资源,PUT用于修改资源
  • PUT应该用于创建资源,POST应该用于修改资源

其实两者都不完全正确。

更好的方法是根据动作的幂等性在 PUT 和 POST 之间进行选择。

下面我们首先会在这篇文章介绍 幂等性(Idempotence) 的概念,说明哪些 HTTP 方法是幂等的,然后在下一篇文章分别对PUTPOST进行分析,最后进行总结

幂等性(Idempotence)

幂等性是 HTTP 方法的一种属性。

如果多个完全相同的请求和单个请求,在服务器上的预期效果相同的话,这个请求方法则被认为是幂等的。值得一提的是,幂等是对服务器的资源状态产生影响(即请求完成后服务端的状态),而不是客户端接收到的响应状态码。

为了说明这一点,考虑被定义为幂等的 DELETE 方法,比如客户端进行一个 DELETE 方法的请求,为了删除一个服务器上的资源,服务器处理这个请求,这个资源被删除,并且服务器返回了 204 的状态码。接着客户端重复发送同样的 DELETE 请求,因为这个资源已经被删除了,服务器返回 404。

尽管客户端接收到的状态码不同,但是对于同样一个 URI,单个 DELETE 请求和多个 DELETE 请求产生的效果相同。

最后,如果客户端在能够读取服务器的响应之前发生故障,幂等的请求可以被自动重试。客户端知道重复请求可以产生相同的预期结果,虽然它们的响应可能不同。

所以总结一下,幂等性的核心概念是 - 你可以多次发送请求,而无需对服务器状态做额外的更改。

那么哪些 HTTP 方法是幂等的呢?

安全方法(Safe Methods)

所有的 safe(安全)方法都是幂等的。

如果一个方法对于服务器来说是只读的,也就是说它不会对服务端的数据进行修改,那么它就是安全的。这些方法是安全的:GETHEADOPTIONS

参考:www.rfc-editor.org/rfc/rfc7231…

幂等方法(Idempotent Methods)

在正确实现的条件下, GETHEADPUTDELETE 等方法都是幂等的,而 POST 方法不是。所有的 safe 方法也都是幂等的。

参考:www.rfc-editor.org/rfc/rfc7231…

HTTP 方法总结

按照上面说的,HTTP 方法可以分为以下几种

1
2
3
4
5
6
7
8
9
10
11
12
yaml复制代码+---------+------+------------+
| 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 |
+---------+------+------------+

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%