PUT 与 POST – 它们之间的区别
PUT 和 POST 之间的主要区别
- 当您需要修改单个资源时,会调用 PUT 方法;当您需要添加子资源时,会调用 POST 方法。
- POST 方法响应可以被缓存,但 PUT 方法响应不能被缓存。
- 您可以在 PUT 中使用 UPDATE 查询,而在 POST 中可以使用 create 查询。
- 在 PUT 方法中,客户端决定资源应该具有的 URI;在 POST 方法中,服务器决定资源应该具有的 URI。
- PUT 方法是明确的,而 POST 方法是抽象的。
- 如果您多次发送相同的 PUT 请求,结果将保持不变;但如果您多次发送相同的 POST 请求,您将收到不同的结果。
- PUT 方法是幂等的,而 POST 方法不是幂等的。

什么是 PUT 方法?
PUT 方法用于更新服务器上的资源。通常,它用其他内容替换目标 URL 处的任何内容。您可以使用它来创建新资源或覆盖现有资源。PUT 请求要求将包含的实体存储在提供的请求 URI(统一资源标识符)下。
什么是 POST 方法?
POST 是 HTTP 支持的一种方法,它
表示 Web 服务器接受请求消息体中包含的数据。POST 通常被万维网用来将用户生成的数据发送到 Web 服务器,或者在您上传文件时使用。
REST API 中 PUT 和 POST 方法的区别
PUT 和 POST 方法之间最重要的区别如下:
PUT | POST |
---|---|
此方法是幂等的。 | 此方法不是幂等的。 |
当您需要修改资源集合中已有的单个资源时,会调用 PUT 方法。 | 当您需要向资源集合添加子资源时,会调用 POST 方法。 |
RFC-2616 规定 PUT 方法发送一个请求,用于存储在提供的请求 URI 中的包含的实体。 | 此方法请求服务器接受包含在请求中的实体。 |
PUT 方法的语法是 PUT /questions/{question-id} | POST 方法的语法是 POST /questions |
您不能缓存 PUT 方法的响应。 | POST 方法的答案可以被缓存。 |
PUT /vi/juice/orders/1234 表示您正在更新由“1234”标识的资源。 | POST /vi/juice/orders 表示您正在创建一个新资源,并返回一个标识符来描述该资源。 |
如果您多次发送相同的请求,结果将保持不变。 | 如果您多次发送相同的 POST 请求,您将收到不同的结果。 |
PUT 方法是明确的。 | POST 方法是抽象的。 |
我们在 PUT 中使用 UPDATE 查询。 | 我们在 POST 中使用 create 查询。 |
在 PUT 方法中,客户端决定资源应该具有的 URI。 | 在 POST 方法中,服务器决定资源应该具有的 URI。 |
PUT 的示例
这是 PUT 方法的 Web 服务器示例
HTTP PUT http://www.google.com/users/234
HTTP PUT http://www.google.com/users/234/accounts/567
请求
PUT /new.html HTTP/1.1 Host: example.com Content-type: text/html Content-length: 20 <p>New File</p>
响应
如果目标资源具有当前表示形式,并且通过包含的表示形式的状态进行了修改,则服务器应发送两个响应。第一个响应代码是 200 (OK),第二个响应代码是 204 (No Content)。
如果目标资源没有任何表示形式,则服务器应通过发送 201 代码 (Created) 响应来告知用户。
HTTP/1.1 201 Created Content-Location: /new.html
POST 的示例
POST 方法的示例
HTTP POST http://www.google.com/users
HTTP POST http://www.google.com/users/234/accounts
使用默认 application/x-www-form-urlencoded 内容类型的表单
POST /test HTTP/1.1 Host: abc.example Content-Type: application/x-www-form-urlencoded Content-Length: 40 field1=value1&field2=value2
使用 PUT 请求测试 API
以下是使用 PUT 请求测试 API 的步骤
第 1 步) 使用 PUT 请求更新资源。
第 2 步) 使用 GET 方法获取资源。如果 PUT 请求成功,您将收到新数据。如果请求中提供的数据无效,此方法将失败。因此,它不会更新任何内容。
使用 POST 请求测试 API
以下是使用 POST 请求测试 API 的步骤
第 1 步) 使用 POST 请求创建一个资源,并确保它返回 200 状态代码。
第 2 步) 对该资源执行 GET 请求,并将数据保存到正确格式。
第 3 步) 您需要添加测试以确保 POST 请求因数据错误而失败。
PUT 方法的优势
以下是使用 PUT 方法的优点/好处
- 它帮助您将提供的实体存储在提供的 URI 下
- 如果提供的实体已存在,您可以执行更新操作,或者使用该 URI 进行创建。
- 您可以按任意次数创建资源。
- 使用 PUT 方法创建资源非常容易。
- 您无需检查用户是否多次单击提交按钮。
- 它可以识别请求中包含的实体。
POST 方法的优势
以下是使用 POST 方法的优点/好处
- 此方法有助于您确定资源 URI。
- 使用 location 标头指定新资源位置标头非常容易。
- 您可以发送请求,将实体作为资源的新从属项,该资源由 URI 标识。
- 您可以将用户生成的数据发送到 Web 服务器。
- 当您不知道要保存资源的 URL 时,它非常有用。
- 当您需要服务器控制您资源的 URL 生成时,请使用 POST。
- POST 是一种安全的方法,因为它的请求不会保留在浏览器历史记录中。
- 您可以使用 POST 轻松传输大量数据。
- 您可以保持数据私密。
- 此方法可用于发送二进制数据和 ASCII 数据。