http post和put到底有啥区别?

网上搜索一大堆,什么post创建put更新,get查询。put幂等,post非幂等。
我咋完全理解不了。我感觉最后到底执行了更新还是查询,这取决于我后台代码怎么写的,如果乐意的话我也可以搞一个接口,getMapping的,我直接在里边更新。
还有幂等,这不也是后台代码来控制的吗?
下边是摘抄的网上的言论:
幂等性:

  • PUT 是幂等的,这意味着多次执行相同的PUT请求,资源的状态不会改变,即无论调用多少次,结果都是一样的。
  • POST 不是幂等的,多次执行相同的POST请求,可能会创建多个资源,导致不同的结果。

这啥意思啊?我都执行一个按照id更新数据的逻辑,用put和post有啥区别吗?
我对http的理解还停留在servlet的get和post上,一个是明文url传值,一个是密文传值。
put和post到底有没有本质上的区别?求大神给解惑一下,万分感谢!

关于AI所回答的, 对于POST请求,由于它通常用于创建资源,多次发送相同的POST请求可能会导致创建多个资源,因此POST不是幂等的。 我可不可以理解为因为在规范上post用于创建一个新的资源,而导致了他不是幂等的,而不是服务器对post和put有什么区别的处理?

阅读 11.1k
avatarAI BotBETA
### HTTP POST 和 PUT 的区别

HTTP POST 和 PUT 在本质上确实有不同的语义和用途,尽管最终执行的操作(如更新数据)可能取决于后端代码的实现,但理解这些区别对于设计RESTful API和正确处理HTTP请求非常重要。

#### 1. 语义区别
- **POST**:通常用于创建资源。虽然POST也可以用于更新资源,但这不是其标准用途。POST请求是非幂等的,意味着多次发送相同的POST请求可能会导致不同的结果(例如,多次提交表单可能会创建多个资源)。
- **PUT**:用于更新或创建资源(如果资源不存在)。PUT请求是幂等的,意味着无论发送多少次相同的PUT请求,资源的最终状态都应该是相同的。如果资源已经存在,PUT请求会更新它;如果不存在,则可能创建它(这取决于后端实现)。

#### 2. 幂等性
- **幂等性**是指一个操作无论执行多少次,产生的结果都是相同的。对于PUT请求,这意味着如果你多次发送相同的PUT请求(例如,更新同一个资源的相同数据),资源的状态不会改变。
- 对于POST请求,由于它通常用于创建资源,多次发送相同的POST请求可能会导致创建多个资源,因此POST不是幂等的。

#### 3. 使用场景
- **POST**:适用于需要提交数据以创建新资源的场景,例如提交表单数据。
- **PUT**:适用于更新现有资源的场景,或者当你想确保无论发送多少次请求,资源的最终状态都相同时。

#### 4. 后端代码控制
- 虽然后端代码最终决定如何处理请求,但遵循HTTP标准的最佳实践是很重要的。这意味着你应该使用POST来创建资源,使用PUT来更新资源(如果适用),以及使用GET来查询资源。
- 幂等性也是由后端代码实现的,但理解HTTP方法的语义有助于设计更一致和可预测的API。

#### 总结
- HTTP POST和PUT在语义、幂等性和使用场景上有明显的区别。
- 尽管后端代码可以决定如何处理这些请求,但遵循HTTP标准有助于设计更好的API。
- 使用POST来创建资源,使用PUT来更新资源(如果适用),是RESTful API设计的最佳实践。

希望这能帮助你更好地理解HTTP POST和PUT的区别!
2 个回答

最后一段说对了,restful 实际开发就是约定俗成的。
一眼就能看明白这个接口是什么操作:get 获取,post 新增,put 修改,delete删除。
有些安全报告直接说 put 和 delete 不安全。
所以就是 get获取,post 包含(新增\修改\删除)操作名写在接口,复杂查询也用post。
https://segmentfault.com/q/1010000040658304

只是一种规范约束罢了,实际还是业务上去实现,你用 DELETE 来创建资源也没有关系

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏