← Назад к блогу
I

I

denis-19 24 минуты назад Инженерный комитет IETF выдал HTTP-методу QUERY статус «Предложенного стандарта» и опубликовал спецификацию RFC 10008 Время на прочтение 3 мин Охват и читатели 641 Сетевое оборудование Сетевые технологии * Облачные вычисления * Тестирование веб-сервисов * Веб-разработка * Занимающийся развитием протоколов и архитектуры сети Интернет профильный Инженерный комитет IETF (Internet Engineering Task Force) предоставил HTTP‑методу QUERY статус «Предложенного стандарта». В комитете опубликовали связанную с этим сетевым проектом спецификацию RFC 10008 . По  информации OpenNET, метод QUERY по способу отправки данных на сервер повторяет метод POST, но отличается от него ориентацией не на запись данных и изменение состояния, а на формирование запросов на чтение. По решаемым задачам новый метод близок к GET и позволят отправлять запросы, которые могут быть повторены или перезапущены без изменения состояния на сервере. Как и в методе POST параметры запроса в QUERY передаются не в URI, а в теле запроса. Подобный подход даёт возможность передавать большой объём параметров в запросе, превышающий лимит на размер параметров в методе GET (8000 байт). GET /feed?q=foo&limit=10&sort=-published HTTP/1.1 Host: example.org

QUERY /feed HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded

q=foo&limit=10&sort=-published Отправленные через метод QUERY параметры не отражаются в логах серверов, что с одной стороны затрудняет анализ запросов и диагностику проблем, но с другой стороны даёт возможность скрыть конфиденциальные данные из логов прокси‑серверов. Среди областей применения метода QUERY упоминается отправка запросов к Web API, выдающих результат в формате JSON или XML, или бэкендам, генерирующим контент. Для определения возможности использования нового метода при обращении к серверу предлагается использовать метод OPTIONS, а для определения поддерживаемых форматов метод HEAD:

OPTIONS /contacts HTTP/1.1 Host: example.org

HTTP/1.1 200 OK Allow: GET, QUERY, OPTIONS, HEAD Также в методе QUERY предусмотрена поддержка кэширования. В этом случае прокси‑серверы или обработчики могут сохранить результат выполнения запроса, присвоить ему URI для последующего обращения через метод GET и вернуть информацию о выдаче прокэшированной версии через заголовок «Last‑Modified». Для проверки наличия изменений с прошлого запроса в QUERY может применяться заголовок «If‑Modified‑Since». Для указания альтернативных вариантов выполнения запроса в ответе могут указываться заголовки «Content‑Location» и «Location», отличия которых в том, что первый передаёт ссылку для получения результата ранее выполненного запроса, а второй предназначен для повторения запроса с теми же параметрами.

QUERY /contacts HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Accept: application/json select=surname,givenname,email&limit=10&match=%22email=@example.%22

HTTP/1.1 200 OK Content-Type: application/json Content-Location: /contacts/stored-results/17 Location: /contacts/stored-queries/42 Last-Modified: Sat, 25 Aug 2012 23:34:45 GMT Date: Sun, 17 Nov 2024, 16:10:24 GMT

GET /contacts/stored-results/17 HTTP/1.1 Host: example.org Accept: application/json Помимо типа «application/x‑www‑form‑urlencoded» для передачи параметров в запросах QUERY также могут напрямую использоваться расширенные форматы, такие как JSONPath (application/jsonpath), XSLT (application/xslt+xml) и SQL (application/sql). Поддерживаемые форматы возвращаются сервером в заголовке Accept‑Query. HEAD /contacts HTTP/1.1 Host: example.org

HTTP/1.1 200 OK Content-Type: application/xhtml Accept-Query: application/x-www-form-urlencoded, application/jsonpath, application/sql

QUERY /errata.json HTTP/1.1 Host: example.org Content-Type: application/jsonpath Accept: application/json

$..[ ?@.errata_status_code=="Rejected" && @.submit_date>"2024" ] ["doc-id"] Теги: RFC 10008 HTTP QUERY Хабы: Сетевое оборудование Сетевые технологии Облачные вычисления Тестирование веб-сервисов Веб-разработка