
Инженерный комитет IETF (Internet Engineering Task Force), который занимается разработкой сетевых протоколов и архитектуры интернета, утвердил HTTP-метод QUERY в статусе «Предложенного стандарта» и представил спецификацию RFC 10008. Этот метод объединяет сильные стороны классических протоколов: способ передачи данных у него идентичен POST, а целевое назначение — семантически близко к GET.
Особенности работы метода QUERY
Основное различие между методами заключается в их назначении. В то время как POST предназначен для изменения состояния ресурсов или передачи данных для записи, QUERY сфокусирован исключительно на операциях чтения. Это позволяет безопасно повторять или перезапускать запросы, не опасаясь возникновения побочных эффектов на стороне сервера.
Важным преимуществом QUERY является способ передачи аргументов. В отличие от GET, где параметры добавляются непосредственно в URI, в QUERY они упаковываются в тело запроса. Это снимает жесткое ограничение на объем передаваемой информации, которое в классическом GET обычно составляет 8000 байт.
Также стоит отметить нюансы конфиденциальности: параметры, отправленные через QUERY, не фиксируются в логах серверов. Это одновременно усложняет диагностику сетевых проблем, но существенно повышает уровень безопасности, так как чувствительные данные не остаются в истории прокси-серверов.
Области применения и технические детали
Разработчики IETF рекомендуют использовать QUERY для взаимодействия с Web API, которые возвращают данные в формате JSON или XML, а также для обращения к бэкендам, работающим с динамической генерацией контента. Для проверки доступности нового метода серверы должны поддерживать запрос OPTIONS, а для уточнения форматов выдачи — метод HEAD.
Кэширование и форматы
Спецификация предусматривает гибкую систему кэширования. Прокси-серверы или промежуточные обработчики могут сохранять результат выполнения запроса и присваивать ему уникальный URI для последующего обращения через привычный GET. Информация о том, была ли выдана версия из кэша, передается через заголовок Last-Modified, а для контроля актуальности данных используется If-Modified-Since.
Кроме того, стандарт регламентирует использование заголовков Content-Location и Location:
- Content-Location указывает ссылку на результат уже выполненного запроса.
- Location предназначен для повторного выполнения запроса с аналогичными параметрами.
Метод QUERY поддерживает не только стандартные типы данных вроде application/x-www-form-urlencoded, но и расширенные форматы для сложных запросов, включая:
- JSONPath (application/jsonpath)
- XSLT (application/xslt+xml)
- SQL (application/sql)
Список поддерживаемых форматов сервер сообщает клиенту через специальный заголовок Accept-Query.






