HTTP-протокол #
Васильев Андрей Михайлович, 2024
Версии презентации
Базовый цикл работы HTTP-протокола #
Изначально HTTP-протокол разрабатывался как текстовый, то есть клиент и сервер обмениваются специально оформленными текстовыми сообщениями друг с другом
В новых версиях текст был заменён на бинарное представление для ускорения передачи данных, но концептуально логика взаимодействия не изменилась
- Клиент открывает TCP-соединение с сервером, которое используется для отправки сообщения, и приёма ответа
- Клиент посылает HTTP-сообщение, например:
GET /index.html HTTP/1.1 Host: developer.mozilla.org Accept-Language: ru
- Сервер отвечает документом на сообщение:
HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT ... <!DOCTYPE html...
- Клиент закрывает или переиспользует TCP-соединение для другого запроса
Разбор структуры HTTP-запроса #
GET /index.html HTTP/1.1
Host: uniyar.ac.ru
Accept-Language: ru
- Первая строка содержит описание запроса
GET
— метод (тип запроса)/index.html
— путь к документу, к которому осуществляется запросHTTP/1.1
— версия протокола
- На следующих строках указываются заголовки запроса в формате
название : значение
- После заголовков может идти тело запроса, данные для передачи
Разбор структуры HTTP-ответа #
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
...
Content-Length: 2761
Content-Type: text-html; charset=utf-8
<!DOCTYPE html...
- Первая строка описывает результаты запроса
HTTP/1.1
— версия протокола200
— код ответа сервера, указывающий результат обработкиOK
— краткое текстовое описание кода ответа
- Список заголовков ответа
- Если в рамках ответа возвращается документ, то среди заголовков точно будет указан
Content-Length
, содержащий размер документа в символах - Также желательно указать тип возвращаемого документа в
Content-Type
- Через пустую строку после заголовков идёт тело документа
Группы кодов статуса #
В протоколе определены следующие группы кодов ответа
100-199
— Информационные ответы200-299
— Успешные ответы300-399
— Перенаправления400-499
— Ошибки в запросе от клиента500-599
— Ошибки в работе сервера
Часто используемые ответы #
200
— запрос был выполнен успешно301
— перенесён на постоянной основе302
— документ временно перенесён404
— документ не найден
Базовый сценарий работы Веб-браузера #
В качестве клиента в HTTP-взаимодействии может выступать любое приложение, которое реализует HTTP-протокол
Зачастую таким клиентом выступает веб-браузер, который получает и отображает веб-страницу для пользователя
- Пользователь указывает в браузере адрес документа, который хочет просмотреть
- Браузер выполняет запрос к серверу и получает в ответ HTML-документ
- Документ внутри себя указывает другие документы, которые нужны для отображения и работы HTML-документа:
- Изображения и видео-файлы для отображения на странице
- CSS-документы определяющие внешний вид элементов на странице
- JavaScript-документы для выполнения интерактивных действий
- WebAssembly-модули для выполнения вычислений
- Браузер запрашивает все эти элементы и формирует из них интерактивный документ, с которым может взаимодействовать пользователь
Особенности протокола HTTP #
Протокол HTTP является простым #
- Протокол изначально текстовый и состоит из небольшого набора элементов
- С помощью доступных инструментов анализирутся бинарные запросы HTTP 2 и 3
Протокол HTTP является расширяемым #
Благодаря механизму заголовков можно добавлять новую семантику к запросам и ответам. Достаточно ввести соглашение между клиентом и сервером
В версии HTTP/1.1 ввели заголовок keep-alive
, который говорит серверу, что клиент может в рамках одного TCP-соединения можно выполнить несколько HTTP-запросов
Формируется новый протокол поверх HTTP
Есть более 100 стандартных заголовков запросов и ответов
В HTTP каждый запрос индивидуален #
С точки зрения протокола HTTP каждый запрос отдельный запрос не зависит от других
- На уровне протокола нельзя сослаться на предыдущий или следующий запрос
- Внутри запроса можно передавать данные, которые связывают запросы друг с другом, но логика по их обработки выходит за пределы HTTP-протокола
Клиент должен передать всю необходимую информацию при каждом запросе
HTTP поддерживает сессии #
Благодаря заголовку Cookies
сервер и браузер могут реализовать механизм сессий:
- Клиент и сервер могут устанавливать новые значения
- Клиент и сервер обязуются их передавать вместе с запросами и ответами
- Данные внутри должны быть небольшого объёма