- Первая строка описывает результаты запроса
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
сервер и браузер могут реализовать механизм сессий:
- Клиент и сервер могут устанавливать новые значения
- Клиент и сервер обязуются их передавать вместе с запросами и ответами
- Данные внутри должны быть небольшого объёма