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






