HTTP中POST和PUT的区别

HTTP中POST和PUT的区别

技术背景

在HTTP协议里,POST和PUT是常用的请求方法,二者均可用于创建资源,但在实际运用中存在明显差异。了解它们的区别,对设计RESTful API十分关键。

实现步骤

资源创建

  • PUT:当客户端知晓要创建资源的URL时采用。客户端需指定资源的新URL,若该URL对应的资源已存在,则将其替换;若不存在,则创建新资源。
1
PUT /resources/<newResourceId> HTTP/1.1
  • POST:当客户端不知晓资源的URL,期望服务器来确定时使用。通常服务器会返回新资源的URL。
1
POST /resources HTTP/1.1

资源更新

  • PUT:可用于更新已有资源。客户端指定资源的URL,服务器把该资源替换为请求中包含的新状态。
1
PUT /resources/<existingResourceId> HTTP/1.1

核心代码

PUT示例

1
2
3
4
5
PUT /questions/<new_question> HTTP/1.1
Host: www.example.com/

PUT /questions/<existing_question> HTTP/1.1
Host: www.example.com/

POST示例

1
2
POST /questions HTTP/1.1
Host: www.example.com/

最佳实践

  • 若客户端能确定资源的URL,优先选用PUT,因其具备幂等性,多次请求不会产生额外影响。
  • 若需服务器控制资源URL的生成,就使用POST。
  • 若要更新资源,建议用PUT替换整个资源;若仅更新部分资源,可考虑使用PATCH方法。

常见问题

POST和PUT的幂等性问题

  • PUT:具有幂等性,多次执行相同的PUT请求,资源状态保持不变。例如x = 5,多次执行结果相同。
  • POST:不具备幂等性,多次执行相同的POST请求,可能会创建多个资源。例如x++,每次执行结果不同。

选择POST还是PUT来创建资源

  • 若客户端能提供正确、规范且符合URL方案的URL,可使用PUT。
  • 若无法完全信任客户端提供的URL,使用POST创建新资源,再由服务器在响应中返回URL。

POST请求丢失的情况

若POST消息丢失,系统状态将无法确定,无法自动恢复。而PUT消息在首次重试成功前,状态才不确定。所以,对于像信用卡交易这类对可靠性要求高的操作,不建议使用POST。


HTTP中POST和PUT的区别
https://119291.xyz/posts/2025-05-07.difference-between-post-and-put-in-http/
作者
ww
发布于
2025年5月7日
许可协议