Из чего состоит HTTP-запрос?

Посмотреть в Telegram: @ITSobes/20
HTTP – популярный протокол прикладного уровня модели OSI. По этому протоколу общаются два участника: клиент и сервер. Клиент формирует и отправляет серверу запрос, сервер его обрабатывает и присылает ответ.

И запрос и ответ – текстовые сообщения. Они имеют одинаковую структуру:

1. Строка запроса/статуса. B первой строке содержится основная информация. Для запроса это HTTP-метод, путь, и версия протокола. Для ответа – статус: версия протокола, код ответа, и опциональное пояснение. Значения следуют именно в таком порядке, и разделяются пробелами

2. Заголовки. Каждая последующая (до пустой) строка представляет заголовок. Заголовки – метаинформация сообщения в формате ключ-значение. Название отделяется от значения символом :.

В заголовках приходят кодировка, размер тела, данные о кешировании, и т.д.. Стандартный набор доступных заголовков описан в спецификации. Пользователь имеет право придумывать собственные заголовки – их принято снабжать префиксом X-. Для запроса обязателен заголовок Host.

3. Тело (опционально). Отделяется от заголовков пустой строкой. Возможность запроса/ответа иметь тело может быть ограничена используемым HTTP-методом и кодом статуса. В теле содержится любая полезная нагрузка. Например ответ на HTTP запрос сайта содержит HTML-код страницы, который и отрисовывается браузером.

Разобраться с запросами и ответами поможет консольная утилита curl (с флагом -v). Вот пример её работы для URL ITSobes.ru: