С какими HTTP-заголовками вы работали при тестировании?

«С какими HTTP-заголовками вы работали при тестировании?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В процессе тестирования API и веб-приложений я активно работал с различными HTTP-заголовками для валидации поведения системы. Основные категории:

Стандартные заголовки:

  • Content-Type (application/json, application/x-www-form-urlencoded, multipart/form-data) — для проверки корректной обработки сервером разных форматов данных.
  • Authorization (Bearer <token>, Basic <credentials>) — для тестирования сценариев аутентификации и авторизации.
  • Accept — для тестирования согласования контента (Content Negotiation), например, проверки, что API возвращает JSON при Accept: application/json.
  • User-Agent — для имитации запросов от разных браузеров или мобильных приложений при тестировании функциональности или логики, зависящей от клиента.
  • Cache-Control — для проверки механизмов кеширования на стороне клиента и прокси-серверов.

Кастомные (X-) заголовки:

  • X-Request-ID / X-Correlation-ID — для сквозного отслеживания запросов в распределенных системах. Я добавлял их в запросы и проверял, что они корректно пробрасываются в логах всех сервисов.
  • X-API-Key — для тестирования альтернативных методов аутентификации.

Пример теста на Python с использованием библиотеки requests:

import requests

# Подготовка заголовков для тестового запроса
test_headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer eyJhbGciOiJIUzI1NiIs...",
    "X-Request-ID": "test_req_12345",
    "User-Agent": "QA-Automation-Suite/1.0"
}

# Отправка запроса и проверка
response = requests.post("https://api.example.com/v1/orders", 
                         headers=test_headers, 
                         json={"productId": 789})

# Валидация: проверяем, что наш X-Request-ID вернулся в ответе (если API его возвращает)
assert response.headers.get("X-Request-ID") == "test_req_12345"
assert response.status_code == 201

Работа с заголовками — ключевая часть тестирования корректности, безопасности и нефункциональных требований (логирование, трассировка) веб-сервисов.