全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 5448|回复: 0

post 相比get 有很多优点,为什么现在的HTTP通信中大多数请...

[复制链接]
发表于 2021-6-1 17:02:22 | 显示全部楼层 |阅读模式
POST和GET是不同的。
GET有如下几个特点:请求不应带有请求体,服务器应忽略/丢弃GET请求的请求体。GET接口不具有副作用。
语义上,用于“读取资源”。POST请求有如下特点:POST接口不需要具有幂等性,请求方不应假设该接口具有幂等性。
语义上,用于改写/新建资源。POST具有create/update的语义,因此常被用于实现类似于“远程过程调用”的目的。这么做并不违反语义,毕竟linux下这么玩的多了去了。
POST可以携带请求体,并且根据语义来说POST需要有请求体,没有的话也是“创建空资源/将资源改写为空”的语义。
POST不应被假设为具有幂等性,因此服务器端常用这种方式告诉请求方,
POST请求不能随意重发,除非响应中明确要求重发(比如3xx)。
问“为什么不用POST代替GET”是没有意义的,就像“为什么不用写代替读”一样没有意义。和POST类似的请求是PUT,这两者语义上实际是重合的,惟一的区别是,
PUT接口具有幂等性。这就对PUT作出了更严格的限制。显然通常而言我们更喜欢幂等的接口,但是有些时候我们也需要做一些不那么trivial的事情。所以非幂等接口也是有存在的必要的。不过幂等的POST接口也不一定非要改成PUT,具体是什么,最终还是由语义决定的。
这些并不是约定,这些就是HTTP协议的一部分,只有双方都遵守协议才能愉快得玩耍。比如说,你自己实现TCP client也可以不遵守TCP协议对序列号和ACK的规定,毕竟你想怎么写就怎么写嘛,但是,我们管这叫,bug。
同理,具有副作用的GET handler,是bug。
GET请求发请求体的,是bug。
服务器不丢弃GET的请求体的,是bug。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-25 20:22 , Processed in 0.057530 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表