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.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…