Какие типы данных можно передавать в HTTP-заголовках (Headers)?

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

Ответ

HTTP-заголовки передают служебную информацию о запросе или ответе. Их можно разделить на несколько категорий:

1. Стандартные заголовки (по назначению):

  • Авторизация: Authorization: Bearer <token>, Authorization: Basic <credentials>.
  • Кэширование: Cache-Control: max-age=3600, ETag, If-None-Match.
  • Тип контента: Content-Type: application/json, Accept: application/xml.
  • CORS (Cross-Origin Resource Sharing): Origin, Access-Control-Allow-Origin, Access-Control-Allow-Methods.
  • Куки: Cookie: sessionId=abc123, Set-Cookie: ....
  • Безопасность: X-Content-Type-Options: nosniff, Strict-Transport-Security: max-age=31536000.

2. Пользовательские (кастомные) заголовки:

  • По соглашению начинаются с префикса X-, например: X-Request-ID, X-API-Key, X-CSRF-Token.
  • Используются для передачи внутренней логики приложения (трассировка, идентификация, метаданные).

Пример добавления заголовков в запросе с помощью Python (библиотека requests):

import requests

headers = {
    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIs...',
    'Content-Type': 'application/json',
    'X-Trace-ID': 'req-789',
    'User-Agent': 'MyApp/1.0'
}

response = requests.post(
    'https://api.example.com/data',
    headers=headers,
    json={'key': 'value'}
)

Важно: Заголовки не предназначены для передачи основного тела запроса (payload), для этого используется тело сообщения (body).