И запрос и ответ – текстовые сообщения. Они имеют одинаковую структуру:
1. Строка запроса/статуса. B первой строке содержится основная информация. Для запроса это HTTP-метод, путь, и версия протокола. Для ответа – статус: версия протокола, код ответа, и опциональное пояснение. Значения следуют именно в таком порядке, и разделяются пробелами
2. Заголовки. Каждая последующая (до пустой) строка представляет заголовок. Заголовки – метаинформация сообщения в формате ключ-значение. Название отделяется от значения символом
:
.В заголовках приходят кодировка, размер тела, данные о кешировании, и т.д.. Стандартный набор доступных заголовков описан в спецификации. Пользователь имеет право придумывать собственные заголовки – их принято снабжать префиксом
X-
. Для запроса обязателен заголовок Host
.3. Тело (опционально). Отделяется от заголовков пустой строкой. Возможность запроса/ответа иметь тело может быть ограничена используемым HTTP-методом и кодом статуса. В теле содержится любая полезная нагрузка. Например ответ на HTTP запрос сайта содержит HTML-код страницы, который и отрисовывается браузером.
Разобраться с запросами и ответами поможет консольная утилита
curl
(с флагом -v
). Вот пример её работы для URL ITSobes.ru: