HTTP 尴尬了几十年的坑,终于填上了
导读做过接口开发的人,多半都懂这个尴尬:
做过接口开发的人,多半都懂这个尴尬:
做复杂查询,用 GET 长度不够,用 POST 语义不对。
这件事说出来有点好笑——HTTP 用了几十年,这么基础的需求,居然一直缺个标准方法。
现在,终于有标准答案了。
这个坑到底是怎么来的?
HTTP 最初设计的时候,分工本来很清楚:
- GET:获取资源,参数放 URL,就是用来做只读查询
- POST:提交数据,修改资源,参数放请求体
可实际用着用着就发现,有一个场景没人接:
当你要做一个复杂的只读查询——比如十几个过滤条件、长文本搜索,这时候该用哪个?
GET 什么都对,就是 URL 长度有限制,条件长一点直接爆掉。 POST 能放长内容,可它本来就不是干这个的,默认不缓存,也没法存书签分享。

为了填这个坑,大家憋了多少偏方
因为标准里没给答案,业界早就憋出一堆潜规则:
- 硬着头皮用 POST 做查询:违背语义就算了,反正大家都这么干
- 把长条件剪碎了塞 URL:能塞多少塞多少,塞不下的存后端,前端只传 ID
- 就这样吧,用户打不开链接是用户的问题
反正就是别扭,但大家都这么用了几十年,也习惯了。
QUERY 来了:终于名正言顺
这次 IETF 正式发布 RFC 10008,定了一个新方法:QUERY。
它就是为了填这个坑来的:
- ✅ 语义正确:明确就是做只读查询
- ✅ 支持长请求体:再复杂的查询条件都放得下
- ✅ 可缓存:和 GET 一样,CDN 能缓存,性能更好
- ✅ 可书签分享:查询结果链接直接存,直接分享
说白了,就是把 GET 和 POST 的优点捏到一起,专门给复杂查询用。
对开发者来说,这意味着什么?
其实不用太激动,这不是什么颠覆性的改变,就是把大家一直在做的事,给了一个名正言顺的标准。
以后写新接口很简单:
- 简单短参数查询 → 继续用 GET
- 创建修改数据 → 继续用 POST
- 复杂长条件只读查询 → 大方用 QUERY
不用再别扭了,不用再绕弯了,终于可以写出语义干干净净的接口。
最后说一句
HTTP 这么成熟的协议,发展了这么多年,还在补这种几十年前没料到的小缺口。
这其实挺有意思——真实世界的需求总是比最初的设计要细腻。有些坑,总得慢慢补。
普及肯定需要时间,存量项目也不用赶着改。但对我们这些天天写接口的人来说,以后终于不用再尴尬借 POST 了。
总归是件好事。