关于 HTTP 请求, POST 请求为什么有的接口还在 url 里传参数呢?

2020-06-17 18:05:58 +08:00
 JieS

POST 可以直接将参数放在 body 里面,为什么多此一举呢? 或者什么情况下需要在 url 拼接参数呢?

比如 POST body 是 json 格式,但又需要传 x-www-form-urlencoded 的时候?

7311 次点击
所在节点    程序员
44 条回复
myCupOfTea
2020-06-17 18:17:09 +08:00
post 用 path var 倒是可以理解,还用 params 我不太能理解为啥要这么干
halk
2020-06-17 18:19:16 +08:00
因为 HTTP 协议并没有禁止
domybestFujian
2020-06-17 18:19:42 +08:00
因为偷懒
shiny
2020-06-17 18:19:57 +08:00
比如钉钉的设计,不管是 GET 还是 POST,AccessToken 都放 query string 中,风格保持统一。
bitholic
2020-06-17 18:21:00 +08:00
Nginx 等比较好把 query string 打印出来
GM
2020-06-17 18:21:19 +08:00
有时候这样比较方便。
比如 /api/wtf?v=a 和 /api/wtf?v=b

代码里可以根据 v 的值的不同,用不同版本的 handler 来处理 body 。
zhuweiyou
2020-06-17 18:21:51 +08:00
qs 和 body 又不冲突
GM
2020-06-17 18:22:12 +08:00
补充上面:
然后 handler 里就可以保持纯净,不需要做跟业务无关的判断。
jinzhongyuan
2020-06-17 18:25:09 +08:00
@halk 应该是实现的库没有禁止哈
misaka19000
2020-06-17 18:30:03 +08:00
为什么晚上吃了肉还要吃蔬菜呢
marquina
2020-06-17 18:40:00 +08:00
@myCupOfTea path var 不就是 params 吗
momocraft
2020-06-17 18:44:28 +08:00
什么叫多此一举,你 post 过除了 json 和 form 的东西吗

> 9

以 RFC 为准,http (包括 uri) 就是没有禁止,请不要自己加戏
myCupOfTea
2020-06-17 18:56:03 +08:00
@marquina 表达不清楚,pathParams 理解,queryParams 不理解
xiangyuecn
2020-06-17 18:59:35 +08:00
分析一下 HTTP 请求格式就知道了

部分参数放 url 里,你就不用读取请求 input stream (这玩意往往是只能读一次),就能拿到某些必要的参数,用处很大的,不然 form 、file 、raw stream 等操作是要读取并解析 input stream 后才能拿到参数的
myCupOfTea
2020-06-17 19:00:02 +08:00
@misaka19000 主要 java spring 里面 一个是 @PathVariable,一个是 @RequestParam,说习惯了
woodensail
2020-06-17 19:03:37 +08:00
做鉴权很有用。服务端可以在 option 请求过来的时候就把请求干掉,不需要接收 post 的请求体了。降低鉴权服务器的压力。
ditel
2020-06-17 19:04:04 +08:00
感觉上传文件又需要签名验证的时候
lxz6597863
2020-06-17 19:07:48 +08:00
POST /api/user?username=abc

{ "age":1 }


update user set age=1 where username=abc
ai277014717
2020-06-17 19:16:09 +08:00
@lxz6597863 应该用 put
sadfQED2
2020-06-17 19:17:20 +08:00
只要你高兴,get 请求还能在 body 体里面传参呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/682438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX