Tracking adoption of the HTTP QUERY method (RFC 10008 — Proposed Standard; IANA-registered, safe + idempotent) across the web ecosystem.
QUERY is a safe, idempotent, cacheable method carrying a request body whose content defines the query — the missing middle between GET (no body, URL-length-bound) and POST-as-read (unsafe, uncacheable).
- sphinxcontrib-httpdomain — Sphinx directives for Python API docs support
QUERYmethod &Accept-Queryheader: sphinx-contrib/httpdomain#114 (merged)
- MDN — base docs: mdn/content#44568
- IETF — RFC 10008; WG tracking label
query-method - Jakarta Servlet — spec support: jakartaee/servlet#1069 (merged)
- WHATWG Fetch — integration (method normalization, CORS, caching): whatwg/fetch#1938
- WHATWG HTML — declarative
<form method="query">: whatwg/html#12594
- Mozilla standards position: mozilla/standards-positions#1430
- WebKit standards position: WebKit/standards-positions#709
- Jakarta REST — WIP: jakartaee/rest#1345
- Node.js undici (the
fetchimplementation for Node): #5459 (merged) - Rust
httpcrate —Method::QUERYconstant: hyperium/http#798 (merged) - OkHttp — caching and redirection support: square/okhttp#9027 (caching; merged) · square/okhttp#9496 (redirection; merged)
- Apache HttpComponents Client — client-side QUERY support: apache/httpcomponents-client#840 (merged)
- Apache Pekko Http: apache/pekko-http#1077 (merged)
- Guzzle (PHP) — §2.5 QUERY redirect semantics: guzzle/guzzle#3702 (merged)
- libsoup — query support: GNOME/libsoup#539 (open)
- Reactor Netty — query support: reactor/reactor-netty#4283 (open)
- Vert.x Web — client and route support: vert-x3/vertx-web#2921 (open)
- libwww-perl —
HTTP::MessageknowsQUERY;LWP::UserAgentredirect tracking: libwww-perl/libwww-perl#530 (open)
- Python
requests—QUERYmethod support & §2.5 redirect semantics: psf/requests#7574 (open)
- Apache Tomcat — standard support: apache/tomcat#1026 (merged/implemented for Tomcat 12)
- Netty — core server and protocol support: netty/netty#16966 (merged for 4.2.16.Final) · netty/netty#16975 (5.0 port) · netty/netty#16978 (4.1 backport)
- Eclipse Vert.x — server-side support & redirect buffering: eclipse-vertx/vert.x#6212 (merged for 5.2.0)
- Micronaut — basic support: micronaut-projects/micronaut-core#12780 (merged)
- Bun (JS/Zig) —
Bun.servenative QUERY method & body support: oven-sh/bun#34839 - PHP (CLI server) — built-in dev server accepts QUERY: php/php-src#22615 (merged)
- Envoy — HTTP/1, HTTP/2, HTTP/3 QUERY method support: envoyproxy/envoy#46404 · envoyproxy/envoy#46496 (merged)
- Eclipse Jetty — client & server support: jetty/jetty.project#15316 (open for Jetty 13.x)
- NGINX — basic method support: nginx/nginx#1488 (open)
- CPython (
http.server) — stdlib HTTP support & method constant: python/cpython#153309 · python/cpython#155786 (open) - APISIX (
lua-resty-radixtree) — route-matching QUERY method bitmap support: api7/lua-resty-radixtree#159 (open) - Play Framework: playframework/playframework#14072 (open)
- Gleam — WIP: gleam-lang/http#82 (open)
- Kong — proxy & cache QUERY support: Kong/kong#14944 (open)
- OWASP Noir — endpoint discovery tool detects QUERY routes: owasp-noir/noir#2232 · owasp-noir/noir#2563 (merged)
oasdiff— OpenAPI breaking-change diff tool supports 3.2queryoperations: oasdiff/oasdiff#1135 (merged)
- Swashbuckle.AspNetCore — SwaggerGen & SwaggerUI QUERY support: domaindrivendev/Swashbuckle.AspNetCore#4092 (open)
- NestJS Swagger — OpenAPI module catch-up for NestJS QUERY routing: nestjs/swagger#4007 (open)
zod-to-openapi— OpenAPI 3.2 QUERY operations from Zod schemas: asteasolutions/zod-to-openapi#393 (open)go-openapi/spec— OpenAPI 3.2queryfield inPathItemProps: go-openapi/spec#288 (open)
- Cloudflare workerd — body-keyed QUERY caching (RFC 10008 §2.7): cloudflare/workerd#6849
- Spring Framework — request mapping &
@RequestBodysupport: spring-projects/spring-framework#34993 (merged) - Ruby on Rails — basic method support: rails/rails#57973 (merged)
- Laravel — full support on 13.x : laravel/framework#60655, laravel/framework#60662 and laravel/framework#60663 (merged)
- LINE Armeria — basic support: line/armeria#6861 (merged)
- Node.js http/https — llhttp 9.2, Node ≥22.2.0 (
req.method === 'QUERY'): nodejs/node#51562 (merged for Node 22.2.0 / 20.x) - Express.js —
app.query(),router.query(): expressjs/express#5615 (merged) · docs: expressjs/expressjs.com#2414 (merged) - Hono —
app.query(): honojs/hono#5070 (v4.13.0) - NestJS —
@QueryMethod(): nestjs/nest#17162 (merged) - Fastify —
fastify.query(),method: 'QUERY': fastify/fastify#6807 (merged) - Fiber —
app.Query(),fiber.MethodQuery: gofiber/fiber#4436 (merged) - Echo —
e.QUERY(),Group.QUERY(): labstack/echo#3038 (merged) - Go
net/http— Go 1.22 pattern syntax (golang/go#61410); redirect fix landed (golang/go#80488);MethodQueryconstant proposal: golang/go#80058 · golang/go#80134 (active review) - axum —
routing::query,MethodFilter::QUERY: tokio-rs/axum#3801 (merged) - Ktor —
query("/..."),HttpMethod.Query: ktorio/ktor#5252 (merged) - http4k —
Method.QUERY: http4k/http4k#1442 (merged) - Quarkus / RESTEasy —
@HttpMethod("QUERY")meta-annotation support: quarkusio/quarkus - ASP.NET Core — .NET 10 (
HttpMethods.Query,MapMethods,[AcceptVerbs]): dotnet/aspnetcore#63260 - Plug / Phoenix —
via: :query,match :query: elixir-plug/plug#1319 (merged) - Flask —
methods=["QUERY"],app.query(),MethodView.query: pallets/flask#6065 (merged) - aiohttp —
add_route("QUERY", ...): aio-libs/aiohttp#13160 (merged) - Kemal —
query "/search": kemalcr/kemal#769 (merged) - Javalin — native
QUERYmapping: javalin/javalin#2525 - Pedestal — native
:querymapping: pedestal/pedestal#724 - Hertz — native
QUERYallow-list support: cloudwego/hertz - Symfony — HttpFoundation 7.4 supports QUERY body; CachingHttpClient support merged: symfony/symfony#64874 (merged)
- Deno — RFC 10008 QUERY method support: denoland/deno#36186 (open)
- Gin — query support: gin-gonic/gin#4721 (open)
- actix-web — query support: actix/actix-web#4140 (open)
- Vapor — query support: vapor/vapor#3489 (open)
- Elysia — query support: elysiajs/elysia#1938 (open)
- Slim — query support: slimphp/Slim#3461 (open)
- Starlette / FastAPI — QUERY routing; OpenAPI 3.2 (this and other PRs have been rejected in favour of the maintainer handling this on their own): fastapi/fastapi#15838 (closed)
- Django — ongoing discussion : django#37232
- Next.js — query support: vercel/next.js#95871 (discussion open) · vercel/next.js#97561 (draft PR)
- OpenAPI — supported since 3.2: OAI/OpenAPI-Specification@3.2.0
- W3C Linked Web Storage protocol — QUERY for search / type-index: w3c/lws-protocol#179 (merged)
- W3C SPARQL Protocol — SPARQL 1.2 protocol note permitting
QUERYmethod: w3c/sparql-protocol#40 (resolved)
- DSpace — repository platform evaluating
QUERYfor discovery/search endpoints: DSpace/DSpace#12862 (open) - OpenSearch: opensearch-project/OpenSearch#22409 (open)
- htsget (
hts-specs) — genomics data-retrieval spec for large queries: samtools/hts-specs#866 (open)
- Apollo Client —
QUERYas GraphQL-over-HTTP transport: apollographql/apollo-feature-requests#473 (open) - GraphQL — GraphQL over HTTP: graphql/graphql-over-http#411 (draft)
A sketch for letting a digest-aware cache answer a QUERY without re-uploading the body (RFC 9530 Content-Digest + Expect: 100-continue). Discussion is on the IETF HTTP WG mailing list (ietf-http-wg@w3.org); the initial GitHub issue httpwg/http-extensions#3469 redirected there.
Originally based on https://github.com/jeswr/http-query-adoption
It seems like the playframework also get a PR for it playframework/playframework#14072