IETF опубликовала RFC 10008 с новым HTTP-методом QUERY для безопасных и идемпотентных запросов с телом. Метод закрывает давнюю проблему сложных поисковых и фильтрующих запросов, которые плохо помещаются в URL, но по смыслу не должны выглядеть как изменение данных через POST.

RFC 10008 закрепил QUERY как метод для сложных запросов к API
В июне 2026 года RFC Editor опубликовал RFC 10008 The HTTP QUERY Method, подготовленный в рамках HTTP Working Group IETF. Документ имеет статус Proposed Standard и описывает новый метод HTTP QUERY.
Главная идея QUERY проста: клиент отправляет серверу запрос с телом, сервер обрабатывает это тело как параметры поиска, фильтрации или выборки данных, результат возвращается в ответе. При этом сам запрос остаётся безопасным и идемпотентным. В терминах HTTP это означает, что операция направлена на чтение данных, а повторная отправка такого запроса должна давать тот же практический эффект.
До появления QUERY разработчики обычно выбирали между двумя вариантами. Простые параметры передавались через GET в URL, например через ?q=foo&limit=10. Более сложные фильтры часто отправлялись через POST с телом запроса. Такой подход работал технически, но семантически выглядел неоднозначно: POST обычно ассоциируется с созданием, изменением или запуском операции, последствия которой нельзя свободно повторять.
QUERY переносит параметры из URL в тело запроса
Обычный GET хорошо подходит для коротких запросов. Проблемы начинаются, когда фильтр становится большим: сложный поиск по каталогу, JSON-условия, много полей сортировки, вложенные параметры, выражения JSONPath или SQL-подобный синтаксис внутри внутреннего API.
В RFC 10008 эта разница показана на простом примере. Классический GET выглядит так:
GET /feed?q=foo&limit=10&sort=-published HTTP/1.1
Host: example.orgЧерез QUERY те же параметры можно передать в теле запроса:
QUERY /feed HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
q=foo&limit=10&sort=-publishedДля разработчика смысл становится чище: это запрос данных, а не команда на изменение ресурса. Для инфраструктуры тоже появляется больше определённости, потому что метод явно объявлен безопасным и идемпотентным.
Новый метод сохраняет важные свойства GET для повторов и кэширования
У QUERY есть два свойства, которые особенно важны для API, прокси, CDN и сетевых клиентов.
Первое свойство — безопасность. Запрос описывает получение результата без изменения целевого ресурса. Сервер всё равно может вести журналы, считать статистику или создавать вспомогательные ресурсы для доступа к результату, но основная операция остаётся запросом данных.
Второе свойство — идемпотентность. QUERY можно повторить после сетевого сбоя, обрыва соединения или перезапуска клиента. Это важное отличие от типичного POST, где автоматический повтор может быть рискованным: например, операция могла уже пройти, а клиент просто не получил ответ.
RFC 10008 также описывает кэширование ответов на QUERY. Такие ответы могут кэшироваться, но ключ кэша должен учитывать тело запроса и связанные метаданные. Это сложнее, чем кэширование GET, где ключ обычно строится вокруг URI, зато метод получает понятную модель для повторных одинаковых запросов.
Accept-Query помогает клиенту узнать поддерживаемые форматы
Вместе с методом QUERY в RFC 10008 описано поле Accept-Query. Оно позволяет серверу сообщить, какие типы данных он готов принимать в теле QUERY-запроса.
Например, ресурс может поддерживать application/x-www-form-urlencoded, JSON, SQL-подобный формат или другой медиатип, если сервер умеет его корректно интерпретировать. Если клиент отправит тело без Content-Type или укажет неподдерживаемый формат, сервер должен вернуть ошибку клиентского уровня, например 415 Unsupported Media Type.
Поддержку самого метода можно проверить через OPTIONS и заголовок Allow. В ответе сервер может перечислить доступные методы, включая GET, QUERY, OPTIONS и HEAD. Для API это даёт нормальный механизм обнаружения возможностей без договорённостей на уровне внешней документации.
Практический эффект заметят поисковые API, GraphQL-подобные запросы и сложные фильтры
HTTP QUERY особенно полезен там, где запрос логически читает данные, но его параметры неудобно или опасно помещать в URL.
Типичные сценарии:
- поиск по большому каталогу с множеством фильтров;
- аналитические API с длинными условиями выборки;
- внутренние сервисы, где запросы передаются через цепочку прокси;
- GraphQL-подобные сценарии чтения, где тело запроса содержит структуру выборки;
- запросы, параметры которых нежелательно светить в URL, логах, истории браузера или закладках.
QUERY не заменяет GET и POST во всех проектах. GET остаётся естественным выбором для коротких адресуемых ресурсов, которые удобно открывать, кэшировать и передавать ссылкой. POST сохраняет роль для операций с изменением состояния, созданием ресурсов и сценариев, где повторная отправка может иметь последствия.
Внедрение QUERY будет зависеть от поддержки серверов, клиентов и промежуточной инфраструктуры
Стандартизация в RFC 10008 означает, что у метода появилась формальная спецификация и регистрация в IANA. Для массового использования этого мало: поддержку должны добавить HTTP-библиотеки, серверные фреймворки, API-шлюзы, CDN, прокси, инструменты тестирования и браузерные клиенты.
Отдельный практический нюанс связан с CORS. QUERY не входит в набор простых CORS-методов, поэтому браузерные запросы к другому источнику потребуют предварительного preflight-запроса. Для обычных веб-приложений это может повлиять на задержку и конфигурацию API.
Ещё одна деталь касается совместимости. В старой инфраструктуре неизвестный HTTP-метод может быть заблокирован прокси, WAF, балансировщиком или серверным роутером. Поэтому первые внедрения QUERY с большой вероятностью появятся в контролируемых API, где команда может обновить и сервер, и клиентов, и сетевые правила.
HTTP QUERY делает семантику API точнее
Стандартизация QUERY закрывает давний разрыв между коротким GET и удобным для тела POST. Теперь у разработчиков есть отдельный метод для сложных запросов на чтение, где параметры удобнее передавать в теле, а инфраструктуре важно понимать безопасность и повторяемость операции.
Для существующих API это ориентир для будущей эволюции, чем повод менять рабочие маршруты. На практике ценность QUERY раскроется там, где длинные URL, смешение POST с операциями чтения и нестабильное кэширование уже создают реальные проблемы.