Методы HTTP-запросов: примеры и возможные проблемы

Сергей Почекутов

HTTP — это популярный протокол связи, который используется для просмотра веб-страниц. Он определяет несколько стандартных методов, которые указывают ресурсу, какое действие нужно выполнить: отдать данные, внести изменения, удалить объект. В этой обзорной статье мы рассмотрим структуру запросов, примеры использования методов, а также разницу между ними.

Реакция моего тимлида поражает умиротворением

Содержание:
1. Структура запросов и ответов
2. Методы HTTP-запроса
3. Примеры запросов и ответов по протоколу HTTP
4. Разница между GET и POST, POST и PUT
5. Совместимость с браузерами
6. Заключение

1. Структура запросов и ответов

HTTP не имеет состояния. Он использует модель на основе сообщений. Каждое взаимодействие с клиентами включает запрос и ответ.

Все сообщения по HTTP имеют один или несколько заголовков. За ними может следовать тело с данными, отправленными при запросе или полученными при ответе.

Разберем структуру запроса на примере:

_GET/adds/results?item=vwHTTP/1.1_

Первая часть — используемый метод. Здесь мы извлекаем ресурсы с помощью GET. Затем идет запрошенный URL, последняя часть — версия HTTP. В примере она 1.1.

В запросе могут быть и другие данные, которые записываются в разные хедеры:

  • Referer header — адрес, с которого поступил запрос.
  • User-Agent header — информация о браузере.
  • Host header — имя хоста.
  • Cookie header — отправка дополнительных параметров на клиент.

Ответы на HTTP запросы тоже состоят их трех частей. Например:

_HTTP/1.1 200 OK_. 

Здесь сначала указывается версия HTTP, затем идет цифровой код и текстовое пояснение результата. Все коды ответов есть в документации.

Курсы разработчиков от наших партнеров Mate AcademyRobot Dreams и Powercode, помогут вам кратно увеличить ваши технические знания и получить наиболее высокооплачиваемую работу.

2. Методы HTTP-запроса

Метод Что делает
GET Запрашивает представление ресурса. Такие запросы могут только извлекать данные.
HEAD Запрашивает ресурс, как и GET, но ответ приходит без тела.
POST Отправляет сущности к указанному ресурсу. Может вызывать побочные эффекты на сервере и изменение состояния.
PUT Заменяет текущие представления ресурса данными запроса.
DELETE Удаляет указанный ресурс.
CONNECT Настраивает туннель с сервером, определенным по ресурсу.
OPTIONS Описывает параметры соединения с ресурсом.
TRACE Вызывает возвращаемое текстовое сообщение с ресурса.
PATCH Частично изменяет ресурс.

Все HTTP Methods можно разделить на три большие группы:

  1. Безопасные — не меняют данные, можно выполнять их в любой последовательности. К ним относятся GET, HEAD и OPTIONS.
  2. Идемпотентные — при повторном выполнении результаты ожидаемо одинаковые. GET, HEAD, PUT, DELETE, OPTIONS, TRACE.
  3. Неидемпотентные — при повторном выполнении результаты будут отличаться. POST и PATCH.

Все методы описаны в двух спецификациях. Первая — Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. В четвертой секции даны определения GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE. Вторая спецификация — PATCH метод для HTTP. Здесь во второй секции дано определение PATCH.

3. Примеры запросов и ответов по протоколу HTTP

GET — запрашиваем содержимое ресурса, получаем данные и никак их не меняем.

Запрос:

GET /doc.txt HTTP/1.1
Host: site.com

Ответ:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Title: Заголовок
Text: Текст

HEAD — делает то же, что и GET, но возвращает только стартовую строку и заголовки.

Запрос:

HEAD /doc.txt HTTP/1.1
Host: site.com

Ответ:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8

POST — создает новый ресурс из данных.

Запрос:

POST /doc.txt HTTP/1.1
Host: site.com
Title=Заголовок
Text=Текст

Если файла не было, возвращается ответ:

HTTP/1.1 201 Created
Location: /doc.txt

Если файл был, возвращается ответ:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Добавлен контент в пустой файл «doc.txt»

POST часто применяется для отправки данных из формы HTML, которую заполняет пользователь на сайте.

PUT — меняет содержимое по указанному URL.

Запрос:

PUT /doc.txt HTTP/1.1
Host: site.com
Title=Новый заголовок
Text=Новый текст

Если файл был, возвращается ответ:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Изменен контент в файле «doc.txt»

Если файла не было, возвращается ответ:

HTTP/1.1 201 Created
Content-Type: text/plain; charset=UTF-8
Изменен контент в файле «doc.txt»

DELETE — удаляет ресурс по указанному URL.

Запрос:

DELETE /doc.txt HTTP/1.1
Host: site.com

Ответ:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Файл «doc.txt» удален

Может также вернуться ответ с кодом состояния 204 No Content.

4. Разница между GET и POST, POST и PUT

Распространенная проблема — непонимание, в чем разница между методами GET и POST. Эта таблица поможет увидеть разницу.

Действие GET POST
Кнопка «Назад» / Перезагрузка Безопасно Данные отправляются повторно, браузер должен предупреждать пользователя об этом
Добавление в закладки Да Нет
Кеширование Да Нет
Тип кодировки application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data
История Сохраняется в истории Не сохраняется в истории
Ограничение в длине запроса Запрос ограничен 2048 символами. Это связано с тем, что он передается внутри URL, который не может быть длиннее Без ограничений
Ограничение по типу данных Только символы ASCII Без ограничений, можно использовать двоичные данные
Видимость в URL Все данные видны в URL Данные не отображаются в URL
Безопасность Данные, переданные в URL, видны пользователю. Безопасность низкая Данные не отображаются в веб-клиенте, не кэшируются и не сохраняются. Безопасность высокая.

Иногда также возникает вопрос, чем отличаются POST и PUT. Ключевое отличие в том, что PUT это идемпотентный метод, а POST — неидемпотентный.

Иначе говоря, повторное применение PUT дает тот же результат, что и в первом случае. Повторный вызов POST может давать разные результаты. Например, если принимать заказы с помощью POST, то человек может сделать один и тот же заказ несколько раз.

5. Совместимость с браузерами

У большинства запросов полная совместимость со всеми популярными браузерами. Даже с Internet Explorer нет проблем, потому что без использования основных методов он бы вообще не работал так, как это нужно обычным пользователям.

Скриншот с сайта developer.mozilla.org

Исключение в таблице совместимости только одно — TRACE.

Это метод, который проверяет обратную связь по пути к целевому ресурсу. Благодаря этому в распоряжении разработчика появляется полезный механизм отладки.

В теле ответа TRACE возвращает то, что было отправлено в запросе. Поэтому его используют в тех случаях, когда нужно узнать, что конкретно получает сервер с клиента.

TRACE также может быть использован для проведения атаки Cross Site Tracing (XST). Эти бреши злоумышленники могут использовать, чтобы украсть cookies или другую конфиденциальную информацию — например, данные учетных записей, которые хранятся в заголовке Authorization при помощи межсайтового скриптинга (XSS).
В большинстве приложений используются GET и POST. Это связано с тем, что HTML поддерживает только эти два метода.

Если приложению нужны методы вроде PUT или TRACE, то необходимо взвесить риски в отношении клиента и сервера.

Заключение

Мы рассмотрели только стандартные методы HTTP. Если их не хватает, можно написать кастомные. Главное, чтобы сервер знал об их существовании и понимал логику обработки.

Если хотите узнать больше о протоколе HTTP и основных методах, то можете посетить специализированные курсы от наших друзей Mate Academy.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023