HTTP-запрос
Чтобы в Интернете что-то от кого-то получить, нужно сделать запрос. В частности, в вебе это HTTP-запросы.
Пробежимся по основным понятиям, рассмотрим структуру и соберём свой HTTP-запрос.
HTTP
HyperText Transfer Protocol — протокол передачи гипертекста (текста со ссылками на другие такие тексты), то есть набор правил, по которым:
- клиент отправляет запрос
- сервер отвечает на него
Структура HTTP-запроса
Запрос — это текст со строгой структурой. Простой пример, который дальше разберём:
GET /images/landscape.png HTTP/1.1
Host: eleday.ru
User-Agent: Chrome
Accept: image/*
1. Строка запроса
GET /images/landscape.png HTTP/1.1
Здесь три элемента:
| Метод | GET |
|---|---|
| Путь | /images/landscape.png |
| Версия протокола | HTTP/1.1 |
Методы бывают:
GET |
Получить данные |
|---|---|
POST |
Отправить |
PUT |
Заменить полностью |
DELETE |
Удалить |
PATCH |
Изменить частично |
HEAD |
Получить заголовки |
и другие. На практике чаще всего используются первые два
Путь
— адрес, который указывает на ресурс, который нужно получить
Версии:
HTTP/1.0 |
Базовая версия протокола. Каждый запрос открывает отдельное соединение с сервером. |
|---|---|
HTTP/1.1 |
Добавлены постоянные соединения (keep-alive), заголовок Host и более эффективная работа с несколькими запросами. |
HTTP/2 |
Бинарный протокол с мультиплексированием: несколько запросов могут передаваться одновременно по одному соединению. |
HTTP/3 |
Работает поверх протокола QUIC (UDP). Быстрее устанавливает соединение и лучше справляется с потерей пакетов. |
2. Заголовки
Дополнительные параметры запроса в формате: Заголовок: значение
Для нашего запроса это:
Host: eleday.ru |
Указывает доменное имя сервера |
|---|---|
User-Agent: Chrome |
Информация о клиентском приложении (браузере), операционной системе и устройстве |
Accept: image/* |
Типы данных, которые клиент может обрабатывать |
Ещё популярные заголовки:
Content-Type |
Тип передаваемых данных |
|---|---|
Authorization |
Авторизационные данные |
Cookie |
Куки пользователя |
Referer |
Страница, с которой пришёл запрос |
3. Тело запроса
Иногда у HTTP-запроса есть тело (body), например, в запросах с методами POST, PUT, PATCH. Тело используется, когда клиент отправляет данные серверу.
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
{
"login": "vasya",
"password": "123456"
}
Ответ
В таком виде запрос отправляется на сервер:
GET /hello HTTP/1.1
Host: eleday.ru
А сервер присылает ответ:
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 12
hello world!
Тут тоже есть заголовки и тело ответа
URL-параметры
У GET-запросов нет тела, в котором можно было бы передать дополнительные данные, но иногда они нужны, например, в поисковых запросах.
В таких случаях используются URL-параметры, которые передаются прямо в пути после знака вопроса в формате
ключ1=значение1&ключ2=значение2&...
Например:
/search?q=http-запрос&sort=recent
Собери свой HTTP-запрос
Теперь попробуй собрать запрос прямо здесь: выбери метод, введи URL, заголовки и получи итоговый HTTP-запрос в текстовом виде.