IETF正式标准化HTTP QUERY方法支持安全读取
2026年6月,IETF在RFC 10008中正式标准化了HTTP QUERY方法。自PATCH于2010年成为标准方法后,这是HTTP新增的首个标准动词。该规范由Julian Reschke、James Snell和Mike Bishop撰写,源于Asbjørn Ulsberg在2019年HTTP Workshop上重新发起的讨论。
QUERY主要用于需要复杂条件的读取操作。GET具备安全、幂等和可缓存特性,但查询参数只能放在URL中,容易受到长度限制,内容还可能出现在访问日志里,对嵌套结构的表达也不够友好。POST能够携带较大的结构化正文,却通常被视为可能改变状态的方法,因此不具备安全、幂等语义,缓存和客户端重试也会受到限制。QUERY试图在两者之间提供第三种选择:通过正文传递查询内容,同时保持读取请求的安全性、幂等性和缓存能力。
例如,原本需要写成“GET /orders?select=email&limit=10&match=……”的订单筛选,可以改为向“QUERY /orders”发送JSON正文,分别传入字段选择、数量限制和匹配条件。只要缓存键同时纳入请求内容,响应就可以继续缓存;服务器还能够使用新的Accept-Query字段声明自身支持QUERY。
围绕这一设计,开发者社区也存在“QUERY只是带正文的GET”的质疑。支持者认为,直接允许GET携带可选正文会造成兼容性和排障问题,因为部分服务器、代理或中间件可能静默丢弃正文;采用新方法后,不支持方可以明确返回“QUERY不受支持”。讨论还提到,Cloudflare目前会通过伪造GET缓存键的方式间接缓存POST,这类变通方案正反映了标准中缺少合适读取方法的问题。
GraphQL和Elasticsearch已经使用POST正文承载复杂读取请求,QUERY则提供了更规范且保留缓存语义的替代路径。Rust的http crate已合并相关支持,.NET、Axum、Quarkus和Bruno也在跟进。不过,规范将QUERY定位为GET和POST的补充,而非替代品。由于客户端、服务器、代理和缓存都需要逐步适配,其普及可能仍需多年,实际应用速度不会像发布标准本身那样迅速。
本文基于公开渠道信息整理,内容可能存在不准确或遗漏之处,不代表本站立场,如内容涉及侵权或错误,请联系我们处理。
阅读原文