It's finally here! The QUERY method. After over a decade of work, the IETF has finally published RFC 10008, a new HTTP method that fills a gap developers have been working around for years. The first draft was submitted back in April 2015 under the name SEARCH. The name was later changed to QUERY (partly because SEARCH already exists as an HTTP method from WebDAV), and after 14 revisions and 11 years it finally crossed the finish line.
QUERY is a new HTTP method designed for sending a query to a server with a request body. Like GET it is safe and idempotent, meaning it does not change the state of the target resource and you can safely retry it. Unlike GET, it has well-defined semantics for a request body.
A simple example:
QUERY /contacts HTTP/1.1
Host: example.org
Content-Type: application/json
Accept: application/json
{
"select": ["surname", "givenname", "email"],
"limit": 10,
"match": "email=*@example.*"
}The server processes the query and returns matching results directly in the response body.
HTTP GET is great for fetching resources but it has a fundamental limitation: the query lives in the URL. That works fine for simple cases but breaks down when:
This is the obvious question, and the honest answer is that people have been using POST for this for years. But POST has a semantic problem; it is neither safe nor idempotent. That matters for several reasons:
POST /search, you have to know the API to understand it's a read-only operation. QUERY /search makes the intent explicit at the protocol level.One of the more interesting features of QUERY is how the server can optionally assign URIs to query results or to the query itself. Both of these headers are optional but can in some cases improve performance and cacheability.
Content-Location in the response points to a URI where this specific result can be retrieved later with a plain GET:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /contacts/stored-results/17Location in the response points to a URI representing the query itself, a stored query that, when fetched with GET, re-runs the query and returns the result at that point in time:
HTTP/1.1 200 OK
Content-Type: application/json
Location: /contacts/stored-queries/42The difference: Content-Location gives you back the frozen result from this execution. Location gives you a bookmark to run the same query again later. Both are optional, and a server that doesn't want to store anything just returns the result and that's that.
The RFC was published on June 16, 2026 and there are already working implementations.
hyperium/http merged support on the same day, which means reqwest and axum will pick it up automatically on their next releases.@Experimental tag.HttpMethod.QUERY the day after publication.In other words: server-to-server use cases are close to usable today, but widespread browser adoption will take longer. Frontend developers can use fetch('...', { method: 'QUERY' }) today, but because it is not yet a CORS-safelisted method, browsers will always trigger an OPTIONS preflight request. This means the backend must explicitly include QUERY in its Access-Control-Allow-Methods response header, otherwise the browser will block the request.
QUERY won't replace GET or POST and that's not the point. It gives us something we've been missing: a standard way to express safe, idempotent, body-based queries without overloading semantics. If you build APIs, this is a good time to start experimenting in server-to-server scenarios, add QUERY to your allow-lists, and verify your cache and retry behavior. Browser tooling and framework ergonomics will catch up, but the protocol building block is finally here.