What is the HTTP QUERY method, and how does it differ from GET and POST?
What is the HTTP QUERY method, and how does it differ from GET and POST?
1 Answer
The
HTTP QUERY method is a proposed HTTP request method that allows clients to perform
safe, read-only operations while including a request body. It was introduced to address the limitation of the
GET method, which does not define semantics for request bodies and is inconsistently supported across clients, servers, and intermediaries.
The QUERY method is intended for scenarios where a client needs to send complex search criteria or filtering parameters in the request body without implying that the request modifies server state.
How QUERY differs from GET
The GET method is the standard way to retrieve resources. Query parameters are typically included in the URL, making requests easy to cache, bookmark, and share.
Example:
GET /products?category=Laptops&brand=Dell&page=1
However, when the search criteria become large or deeply nested, URLs can become difficult to manage or exceed practical length limits. Although some implementations allow a request body with
GET, its behavior is not standardized and may be ignored by clients, proxies, or servers.
The QUERY method solves this by allowing the request parameters to be sent in the request body while still representing a safe, read-only operation.
Example:
QUERY /products
Content-Type: application/json
{
"category": "Laptops",
"brands": ["Dell", "HP"],
"priceRange": {
"min": 500,
"max": 2000
},
"sortBy": "price"
}
How QUERY differs from POST
The POST method is commonly used to:
- Create resources
- Submit forms
- Upload files
- Trigger server-side actions
Because POST requests usually represent operations that may change server state, they are generally not considered safe or inherently idempotent.
Example:
POST /orders
Content-Type: application/json
{
"customerId": 101,
"items": [
{
"productId": 5,
"quantity": 2
}
]
}
Although many APIs use POST for complex searches, doing so can blur the distinction between read-only queries and operations that modify data. The
QUERY method provides clearer semantics by explicitly indicating that the request is intended only to retrieve information.
Feature Comparison
| Feature | GET | QUERY | POST |
|---|---|---|---|
| Primary purpose | Retrieve resources | Retrieve resources with a request body | Create resources or perform actions |
| Request body | Not standardized | Supported | Supported |
| Safe (read-only) | Yes | Yes | Usually No |
| Idempotent | Yes | Yes | Not necessarily |
| Parameters | URL query string | Request body | Request body |
| URL length limitations | Yes | No | No |
| Widely supported | Yes | Limited | Yes |
When to use each method
- Use
GETfor simple resource retrieval where filters fit naturally in the URL. - Use
QUERYfor complex, read-only searches that require structured request data and where your clients and infrastructure support the method. - Use
POSTfor operations that create, update, or otherwise affect server state, or for complex queries when compatibility with existing HTTP infrastructure is more important than expressing read-only semantics.
Summary
The HTTP QUERY method fills a gap between GET and
POST by enabling safe, idempotent, read-only requests with a request body. It is particularly useful for advanced search and filtering operations that cannot be expressed conveniently through URL parameters. However, because support for QUERY is still limited across many clients, browsers, proxies, and API gateways,
GET remains the preferred choice for simple retrievals, while
POST continues to be the most compatible option for complex requests in many production REST APIs.