
【导语:IETF 最新发布的 RFC 10008 正式定义了 HTTP 新成员 QUERY 方法,它结合了 GET 的安全幂等与 POST 带请求体的能力,解决了 GET 和 POST 存在的问题。】

IETF 发布的 RFC 10008 为 HTTP 家族增添了新成员 QUERY 方法。该方法在 HTTPbis 工作组中早有讨论,草案名为 draft - ietf - httpbis - safe - method - w - body,如今终于定稿。

GET 方法存在 URL 长度有限、编码复杂查询参数不自然的问题;POST 虽能带请求体,但不是幂等的,CDN 不能缓存,中间件不敢自动重试。而 QUERY 方法要在协议层面同时实现 GET 的语义和 POST 的表达能力。
根据规范,QUERY 是安全且幂等的,请求体内容由 Content - Type 决定,可包含 SQL、JSONPath、XSLT 或普通表单数据。服务端通过新的响应头 Accept - Query 告知客户端接受的查询格式。

Content - Type 是强制的,不带该请求头的服务端必须返回 400。响应可以用 Content - Location 指向本次查询结果,用 Location 指向等效资源,客户端下次可用 GET 直接访问。
QUERY 的响应可以被缓存,但缓存键必须包含完整请求内容,缓存中间件可做语义归一化,除非客户端发了 no - transform。跨域 QUERY 请求需要 OPTIONS 预检,不是 CORS 安全方法。

该草案作者是 HTTP 工作组的熟面孔,早期甚至考虑过复用 WebDAV 的 SEARCH 方法,但最终选择了 QUERY,因为它“更好地捕捉了与 URI 查询组件的关联”。
编辑观点:QUERY 方法的出现为 HTTP 协议带来了新的可能,有效解决了 GET 和 POST 的部分痛点,有望在未来的网络应用中发挥重要作用,推动网络技术的进一步发展。


被折叠的 条评论
为什么被折叠?



