HTTP 20 年来首个新方法出现了:为什么你该在意
来源:dev.to — 2026-09-06
📋 概述
2026 年 6 月 IETF 发布 RFC 10008,定义了新的 HTTP 方法 QUERY——20 多年来第一个新方法,本质就是「带 body 的 GET」。它同时保证安全(不改变状态)与幂等(发两次等于发一次),彻底解决长期以来「干净的语义 vs 真实的负载」二选一的困境:GET 安全幂等可缓存但不能带 body 且 URL 有长度上限,POST 能带任意 body 但被 HTTP 假设会改变状态,于是没有自动缓存、没有安全重试。文章用 axios/fetch 示范了现状用法(axios 会透传任意自定义方法、浏览器里除 GET 外 body 都有效;CORS 需 OPTIONS 预检;Node 无 CORS 可即用),并预测了六种演进:假 POST 端点消失、重试逻辑变简单、缓存下移到 CDN、GraphQL 找到归宿、URL 重新可读、API 自文档化。
🔑 核心要点
- QUERY 是带 body 的 GET:既保证安全(不改变状态)与幂等(发两次等于发一次),又能携带任意大小的请求体,把过去十年「用 POST 装 GET 的谎话」扶正
- 过去的二选一困局:GET 安全幂等可缓存但不能带 body、URL 有约 8000 字符上限;POST 能带任意 body 却被假设会改变状态,于是无自动缓存、无安全重试,超时后客户端不敢贸然重试
- 落地现状:协议层本就支持任意方法 token,Nginx/Apache 能透传 QUERY,但白名单(limit_except/WAF/安全规则)需显式加 QUERY;真正的瓶颈是框架——Spring 有 PR、Rails 在讨论、Express 需手动处理,原生支持要滚到 2026–2027
- 浏览器端唯一坑是 CORS:QUERY 不在安全名单里,跨域触发预检,服务器须用 Access-Control-Allow-Methods 应答 OPTIONS;同源无需任何处理,Node 无 CORS 可立即可用
- RFC 由 Cloudflare 与 Akamai 工程师合著、并定义 Accept-Query 响应头供端点宣告能力——缓存正是 QUERY 收益最大的地方,CDN 支持可能先于框架落地
- 迁移的第一批最容易:每个用 POST 的 /search、/filter、/reports 读接口都是潜在的 QUERY 端点,body 原样不动只改方法名
💡 金句
POST 能用,但它一直是个谎言——我们在向 HTTP 声明「这会修改某样东西」,而它并不会。
👍 0
👎 0
← 返回 dev.to 首页