IETF выпустил новый метод HTTP-запросов — QUERY.
Он закреплен в RFC 10008 и встает в один ряд с привычными GET, POST, PUT и PATCH.
Разработка велась с 2021 года, а среди авторов — инженеры Cloudflare и Akamai. Это те самые компании, которые держат около половины интернета на своих серверах кеширования.
Читают прямо сейчас:
Как устроены API: разбираемся на примере REST API — что делают GET, POST и другие методы и почему их различие важно для QUERY
Как тестируют API: разбираемся на примере REST API — как проверять HTTP-запросы на практике и что изменится с появлением нового метода
NAT: что это такое, как работает и зачем нужен — как промежуточные серверы и CDN обрабатывают запросы и почему возможность кешировать QUERY так важна
Почему GET и POST не подходили
Чтобы получить данные с сервера, обычно используют GET — он безопасен и его можно повторять сколько угодно раз без последствий. Но у GET есть проблема: все параметры запроса приходится впихивать в адресную строку.
Если условий много (фильтры, даты, сортировки), ссылка превращается в нечитаемую простыню на тысячи символов. Такую ссылку готов принять далеко не каждый сервер. А еще эта ссылка может случайно засветить чувствительные данные в истории браузера или логах.
Поэтому разработчики стали пересылать сложные запросы через POST: данные кладутся не в ссылку, а в тело запроса. Работать стало удобнее, но появилась другая проблема.
POST создавался для другого — для отправки форм, загрузки файлов, изменения данных на сервере. Он может менять состояние сервера. А потому повторно отправлять такой запрос при сбое небезопасно: браузер и прокси-серверы попросту не рискуют делать это автоматически.
Что решает QUERY
QUERY берет от POST удобство — сложные данные можно передавать в теле запроса, а не в ссылке. А от GET — гарантию, что запрос ничего не меняет на сервере и его можно повторять хоть 100 раз подряд.
Это значит, что промежуточные серверы, такие как прокси, CDN и шлюзы, смогут кешировать подобные запросы и сами повторять их при обрыве связи, не дожидаясь действий пользователя.
Когда ждать поддержки
Пока метод внедряют осторожно. Формы в HTML по-прежнему понимают только GET и POST — стандарт форм еще предстоит обновить. Этим уже занимается рабочая группа WHATWG.
Многие сетевые компоненты тоже пока не знают об QUERY и могут просто отклонить такой запрос.
Быстрее всех сориентировались разработчики фреймворков и языков: Node.js добавляет поддержку в свой HTTP-модуль, PHP-фреймворк Laravel уже умеет работать с QUERY, а язык Go был готов к этому изначально — он и раньше позволял отправлять произвольные HTTP-методы.
