Какую роль выполняют заголовки (headers) в HTTP-запросах и ответах?

«Какую роль выполняют заголовки (headers) в HTTP-запросах и ответах?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Категории и примеры важных заголовков:

Категория Заголовок (пример) Назначение
Определение контента Content-Type: application/json Указывает MIME-тип тела запроса/ответа (JSON, HTML, форма).
Кэширование Cache-Control: max-age=3600 Даёт инструкции браузеру и промежуточным прокси о том, как кэшировать ресурс.
Аутентификация Authorization: Bearer eyJhbGci... Передаёт учётные данные (токен) для доступа к защищённым ресурсам.
CORS (безопасность) Access-Control-Allow-Origin: https://site.com Сообщает браузеру, разрешено ли текущему origin'у делать межсайтовые запросы.
Клиентская идентификация User-Agent: Mozilla/5.0... Сообщает серверу о типе клиента (браузер, ОС). Accept-Language: ru-RU указывает предпочитаемый язык.
Управление соединением Connection: keep-alive Позволяет переиспользовать TCP-соединение для нескольких запросов.
Условные запросы If-None-Match: "abc123" Позволяет кэширующему клиенту запросить данные только если они изменились (сравнивается с ETag).

Пример полного HTTP-запроса с заголовками:

GET /api/products/123 HTTP/1.1
Host: api.shop.com
User-Agent: MyApp/1.0
Accept: application/json
Authorization: Bearer xyz789
Cache-Control: no-cache

Пример ответа сервера:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: public, max-age=300
ETag: "v2.5"
Content-Length: 85

{"id": 123, "name": "Ноутбук", "price": 99999}

Заголовки — это фундаментальный механизм управления поведением веб-коммуникации.