HTTP 尴尬了几十年的坑,终于填上了

导读做过接口开发的人,多半都懂这个尴尬:

做过接口开发的人,多半都懂这个尴尬:

做复杂查询,用 GET 长度不够,用 POST 语义不对。

这件事说出来有点好笑——HTTP 用了几十年,这么基础的需求,居然一直缺个标准方法。

现在,终于有标准答案了。

这个坑到底是怎么来的?

HTTP 最初设计的时候,分工本来很清楚:

  • GET:获取资源,参数放 URL,就是用来做只读查询
  • POST:提交数据,修改资源,参数放请求体

可实际用着用着就发现,有一个场景没人接:

当你要做一个复杂的只读查询——比如十几个过滤条件、长文本搜索,这时候该用哪个?

GET 什么都对,就是 URL 长度有限制,条件长一点直接爆掉。 POST 能放长内容,可它本来就不是干这个的,默认不缓存,也没法存书签分享。

三种方法对比一目了然

为了填这个坑,大家憋了多少偏方

因为标准里没给答案,业界早就憋出一堆潜规则:

  1. 硬着头皮用 POST 做查询:违背语义就算了,反正大家都这么干
  2. 把长条件剪碎了塞 URL:能塞多少塞多少,塞不下的存后端,前端只传 ID
  3. 就这样吧,用户打不开链接是用户的问题

反正就是别扭,但大家都这么用了几十年,也习惯了。

QUERY 来了:终于名正言顺

这次 IETF 正式发布 RFC 10008,定了一个新方法:QUERY

它就是为了填这个坑来的:

  • ✅ 语义正确:明确就是做只读查询
  • ✅ 支持长请求体:再复杂的查询条件都放得下
  • ✅ 可缓存:和 GET 一样,CDN 能缓存,性能更好
  • ✅ 可书签分享:查询结果链接直接存,直接分享

说白了,就是把 GET 和 POST 的优点捏到一起,专门给复杂查询用。

对开发者来说,这意味着什么?

其实不用太激动,这不是什么颠覆性的改变,就是把大家一直在做的事,给了一个名正言顺的标准。

以后写新接口很简单:

  • 简单短参数查询 → 继续用 GET
  • 创建修改数据 → 继续用 POST
  • 复杂长条件只读查询 → 大方用 QUERY

不用再别扭了,不用再绕弯了,终于可以写出语义干干净净的接口。

最后说一句

HTTP 这么成熟的协议,发展了这么多年,还在补这种几十年前没料到的小缺口。

这其实挺有意思——真实世界的需求总是比最初的设计要细腻。有些坑,总得慢慢补。

普及肯定需要时间,存量项目也不用赶着改。但对我们这些天天写接口的人来说,以后终于不用再尴尬借 POST 了。

总归是件好事。