HTTP QUERY стандартизирован в RFC 10008 — безопасные запросы получили тело без семантики POST

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

HTTP QUERY
HTTP QUERY

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 с операциями чтения и нестабильное кэширование уже создают реальные проблемы.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться