Что такое заголовок (header) в протоколах HTTP и HTTPS?

«Что такое заголовок (header) в протоколах HTTP и HTTPS?» — вопрос из категории Сети, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP-заголовок (header) — это метаданные в виде пар «ключ: значение», которые передаются в начале HTTP-запроса или ответа. Они управляют обработкой сообщения, передают информацию о клиенте, сервере, кэшировании, авторизации, типе содержимого (body) и многом другом.

Пример HTTP-запроса с заголовками (как его видит C++-сервер):

GET /api/data HTTP/1.1
Host: example.com
User-Agent: MyCppClient/1.0
Accept: application/json
Authorization: Bearer token123

Ключевые отличия HTTP и HTTPS:

  • В HTTP заголовки передаются в открытом тексте.
  • В HTTPS всё сообщение (включая заголовки) шифруется с помощью TLS/SSL поверх TCP-соединения. С точки зрения логики приложения (например, при использовании библиотек вроде libcurl или Boost.Beast) работа с заголовками идентична.

Основные категории заголовков:

  • General Headers (например, Cache-Control).
  • Request Headers (например, User-Agent, Authorization).
  • Response Headers (например, Server, Set-Cookie).
  • Entity Headers (например, Content-Type, Content-Length).

При программировании сетевых клиентов или серверов на C++ (с использованием сокетов или библиотек) разработчик напрямую формирует и парсит эти строки заголовков.