HTTP — это популярный протокол связи, который используется для просмотра веб-страниц. Он определяет несколько стандартных методов, которые указывают ресурсу, какое действие нужно выполнить: отдать данные, внести изменения, удалить объект. В этой обзорной статье мы рассмотрим структуру запросов, примеры использования методов, а также разницу между ними.
Содержание:
1. Структура запросов и ответов
2. Методы HTTP-запроса
3. Примеры запросов и ответов по протоколу HTTP
4. Разница между GET и POST, POST и PUT
5. Совместимость с браузерами
6. Заключение
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 Academy, Robot Dreams и Powercode, помогут вам кратно увеличить ваши технические знания и получить наиболее высокооплачиваемую работу.
| Метод | Что делает |
GET | Запрашивает представление ресурса. Такие запросы могут только извлекать данные. |
HEAD | Запрашивает ресурс, как и GET, но ответ приходит без тела. |
POST | Отправляет сущности к указанному ресурсу. Может вызывать побочные эффекты на сервере и изменение состояния. |
PUT | Заменяет текущие представления ресурса данными запроса. |
DELETE | Удаляет указанный ресурс. |
CONNECT | Настраивает туннель с сервером, определенным по ресурсу. |
OPTIONS | Описывает параметры соединения с ресурсом. |
TRACE | Вызывает возвращаемое текстовое сообщение с ресурса. |
PATCH | Частично изменяет ресурс. |
Все HTTP Methods можно разделить на три большие группы:
GET, HEAD и OPTIONS.GET, HEAD, PUT, DELETE, OPTIONS, TRACE.POST и PATCH.Все методы описаны в двух спецификациях. Первая — Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. В четвертой секции даны определения GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE. Вторая спецификация — PATCH метод для HTTP. Здесь во второй секции дано определение PATCH.
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.
Распространенная проблема — непонимание, в чем разница между методами 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, то человек может сделать один и тот же заказ несколько раз.
У большинства запросов полная совместимость со всеми популярными браузерами. Даже с Internet Explorer нет проблем, потому что без использования основных методов он бы вообще не работал так, как это нужно обычным пользователям.
Исключение в таблице совместимости только одно — TRACE.
Это метод, который проверяет обратную связь по пути к целевому ресурсу. Благодаря этому в распоряжении разработчика появляется полезный механизм отладки.
В теле ответа TRACE возвращает то, что было отправлено в запросе. Поэтому его используют в тех случаях, когда нужно узнать, что конкретно получает сервер с клиента.
TRACE также может быть использован для проведения атаки Cross Site Tracing (XST). Эти бреши злоумышленники могут использовать, чтобы украсть cookies или другую конфиденциальную информацию — например, данные учетных записей, которые хранятся в заголовке Authorization при помощи межсайтового скриптинга (XSS).
В большинстве приложений используются GET и POST. Это связано с тем, что HTML поддерживает только эти два метода.
Если приложению нужны методы вроде PUT или TRACE, то необходимо взвесить риски в отношении клиента и сервера.
Мы рассмотрели только стандартные методы HTTP. Если их не хватает, можно написать кастомные. Главное, чтобы сервер знал об их существовании и понимал логику обработки.
Если хотите узнать больше о протоколе HTTP и основных методах, то можете посетить специализированные курсы от наших друзей Mate Academy.
Visual Code от Microsoft, вероятно, один из самых популярных редакторов кода. Разработчики любят его за…
Япония сама по себе — сплошной киберпанк. Это заметил даже культовый писатель жанра Уильям Гибсон,…
Сам по себе телефон Айфон 17 Про Макс – отличный подарок. У него красивая заводская…
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…