← Назад к вопросам

Какие знаешь заголовки у request?

2.2 Middle🔥 111 комментариев
#Тестирование API

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP-заголовки запроса (Request Headers): классификация и назначение

HTTP-заголовки запроса — это метаданные, которые клиент (например, браузер или ваше тестовое приложение) отправляет серверу для описания характера запроса, возможностей клиента, данных для аутентификации, управления кэшированием и многого другого. Как QA-инженер, я активно использую знание заголовков для:

  • Написания точных и воспроизводимых автотестов API (например, задавая Content-Type).
  • Диагностики проблем при интеграционном тестировании.
  • Тестирования безопасности (проверка CORS, CSRF-токенов).
  • Верификации кэширования и производительности.

Заголовки можно условно разделить на несколько ключевых категорий.

1. Основные (General) и Заголовки запроса (Request) из спецификации

Это базовые заголовки, определяемые стандартами HTTP/1.1 и HTTP/2.

  • Host (ОБЯЗАТЕЛЬНЫЙ для HTTP/1.1) — Указывает доменное имя и порт сервера. Критически важен для виртуального хостинга.

    Host: api.example.com:8080
    
  • User-Agent — Содержит информацию о клиентском приложении (браузер, ОС, версия). Часто используется для статистики или мобильной/десктопной адаптации.

    User-Agent: Mozilla/5.0 (X11; Linux x86_64) MyTestClient/1.0
    
  • Accept — Сообщает серверу, какие типы контента (MIME-типы) клиент может обработать. Тестирование этого заголовка проверяет Negotiation Content.

    Accept: application/json, text/html;q=0.9, */*;q=0.8
    
  • Accept-Encoding, Accept-Language, Accept-Charset — Аналогично, определяют предпочтения по кодировке, языку и набору символов.

  • Content-Type (для тел запросов: POST, PUT) — Указывает MIME-тип передаваемых данных. Крайне важен в API-тестировании.

    Content-Type: application/json
    Content-Type: application/x-www-form-urlencoded
    
  • Content-Length — Длина тела запроса в байтах. Для пустого тела (GET) обычно отсутствует.

2. Заголовки для аутентификации и авторизации

Без этих заголовков невозможна работа с защищенными ресурсами.

  • Authorization — Содержит учетные данные для доступа к защищенному ресурсу. Самые распространенные схемы:
    *   `Bearer <token>` (для OAuth 2.0 / JWT)
    *   `Basic <base64(username:password)>`
```http
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
  • Cookie — Передает серверные cookies, ранее установленные заголовком Set-Cookie. Ключевой для тестирования сессий.

    Cookie: sessionId=abc123; csrfToken=xyz789
    
  • X-CSRF-Token, X-XSRF-Token — Нестандартные, но широко используемые заголовки для защиты от межсайтовой подделки запросов (часто в связке с cookies).

3. Заголовки управления кэшированием

Позволяют клиенту контролировать механизм кэширования на стороне сервера или промежуточных прокси.

  • Cache-Control — Директивы для управления кэшем (как запроса, так и ответа). Например:
    *   `no-cache` — "Сначала проверь актуальность на сервере".
    *   `no-store` — "Не сохраняй копию нигде".
    *   `max-age=0` — Контент устарел мгновенно, нужна проверка.
```http
Cache-Control: no-cache, max-age=0
```
  • If-Modified-Since, If-None-Match (ETag) — Условные запросы. Позволяют серверу вернуть статус 304 Not Modified, если ресурс не изменился, экономя трафик. Важны для тестов производительности.

4. Заголовки для управления соединением и CORS (Cross-Origin Resource Sharing)

Основа для тестирования современных веб-приложений и API.

  • Connection — В HTTP/1.1 управляет состоянием соединения (keep-alive, close).

  • Upgrade — Запрос на смену протокола (например, на WebSocket).

  • CORS-заголовки запроса:

    *   **`Origin`** — Указывает источник (схема, домен, порт) инициатора запроса. Сервер использует его для проверки политики CORS.
    ```http
    Origin: https://myfrontend.app
    ```
    *   **`Access-Control-Request-Method`** — Используется в **preflight-** запросах (`OPTIONS`) для указания метода основного запроса (например, `PUT`).
    *   **`Access-Control-Request-Headers`** — В **preflight-** запросах перечисляет нестандартные заголовки, которые будут отправлены.

5. Другие важные для тестирования заголовки

  • Referer (с опечаткой в спецификации) — Адрес предыдущей страницы, с которой пришел пользователь. Важен для тестирования аналитики и логики навигации.

  • X-Requested-With — Часто имеет значение XMLHttpRequest, что позволяет серверу понять, что запрос инициирован AJAX (например, через fetch или axios).

  • Заголовки прокси и цепочки доверия:

    *   `X-Forwarded-For`, `X-Real-IP` — Используются прокси-серверами для передачи исходного IP-адреса клиента.
    *   `X-Forwarded-Proto` — Указывает исходный протокол (http/https).

  • Кастомные (пользовательские) заголовки — Любые заголовки, начинающиеся с X-, часто используются для внутренней логики приложения (например, X-API-Key, X-App-Version). Их наличие, формат и обработку необходимо тщательно тестировать.

Практическое применение в QA

При тестировании API через Postman, REST Assured, Supertest или вручную через cURL, я сознательно устанавливаю эти заголовки:

# Пример комплексного запроса с ключевыми заголовками
curl -X POST 'https://api.example.com/v1/orders' \
  -H 'Host: api.example.com' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <token>' \
  -H 'X-Correlation-ID: test-run-12345' \ # Кастомный заголовок для трассировки
  -d '{"productId": 42, "quantity": 2}'

Понимание заголовков позволяет не просто отправлять запросы, а моделировать поведение реальных клиентов, выявлять ошибки в конфигурации сервера (CORS, кэширование), обеспечивать безопасность (валидация токенов) и гарантировать, что API контракт соблюдается на уровне метаданных, а не только тела запроса.

Какие знаешь заголовки у request? | PrepBro