HTTP-статусы для тестировщика

HTTP-статусы для тестировщика

QA❤️4Life

Шпаргалка по HTTP-статусам для тестировщика. Запоминай и пользуйся!

Канал: QA❤️4Life
Автор: Евгений Гусинец


1xx — Informational (Информационные)

  • 100 Continue — сервер готов принять тело запроса. Клиент может продолжать отправку
  • 101 Switching Protocols — сервер переключается на протокол, указанный клиентом (WebSocket, HTTP/2)
  • 102 Processing — сервер принял запрос, но ещё не завершил обработку (WebDAV)
  • 103 Early Hints — сервер отправляет предварительные заголовки, пока генерируется основной ответ

2xx — Success (Успешные запросы)

  • 200 OK — запрос выполнен успешно. Тело ответа содержит результат (GET)
  • 201 Created — ресурс успешно создан. В ответе — Location с URL нового ресурса (POST)
  • 202 Accepted — запрос принят в обработку, но результат ещё не готов (асинхронные задачи)
  • 204 No Content — запрос выполнен успешно, тело ответа пустое (DELETE, PUT)
  • 206 Partial Content — сервер возвращает часть ресурса (Range-запросы, докачка файлов)

3xx — Redirection (Перенаправления)

  • 301 Moved Permanently — ресурс перемещён навсегда. Все будущие запросы — на новый URL
  • 302 Found — временное перенаправление. Текущий запрос — на другой URL
  • 303 See Other — результат запроса находится по другому URL (GET после POST)
  • 304 Not Modified — ресурс не изменился. Используй кэшированную версию (If-Modified-Since)
  • 307 Temporary Redirect — временное перенаправление с сохранением HTTP-метода
  • 308 Permanent Redirect — постоянное перенаправление с сохранением HTTP-метода

4xx — Client Error (Ошибки клиента)

  • 400 Bad Request — невалидный запрос: синтаксическая ошибка, некорректные данные
  • 401 Unauthorized — требуется аутентификация. Нет или невалидный токен/логин
  • 403 Forbidden — нет прав доступа. Аутентификация есть, но недостаточно прав
  • 404 Not Found — ресурс не найден. Неправильный URL или ресурс удалён
  • 405 Method Not Allowed — HTTP-метод не поддерживается для данного ресурса
  • 406 Not Acceptable — сервер не может сформировать ответ в формате, указанном в Accept
  • 408 Request Timeout — сервер прервал соединение из-за таймаута
  • 409 Conflict — конфликт: дубликат, версионирование, неконсистентное состояние
  • 410 Gone — ресурс удалён навсегда и больше не будет доступен
  • 415 Unsupported Media Type — формат тела запроса не поддерживается сервером
  • 422 Unprocessable Entity — тело запроса валидно по формату, но семантически некорректно (валидация)
  • 429 Too Many Requests — превышен лимит запросов (rate limit). Проверить заголовок Retry-After

5xx — Server Error (Ошибки сервера)

  • 500 Internal Server Error — внутренняя ошибка сервера. Общая ошибка без деталей
  • 501 Not Implemented — метод не реализован сервером
  • 502 Bad Gateway — шлюз/прокси получил некорректный ответ от вышестоящего сервера
  • 503 Service Unavailable — сервер временно недоступен (перегрузка, обслуживание)
  • 504 Gateway Timeout — шлюз не дождался ответа от вышестоящего сервера
  • 505 HTTP Version Not Supported — версия HTTP не поддерживается сервером

Что тестировать с HTTP-статусами

Позитивные сценарии

  • 200 OK — проверить для GET-запросов: тело ответа содержит ожидаемые данные
  • 201 Created — проверить для POST: заголовок Location указывает на созданный ресурс
  • 204 No Content — проверить для DELETE: тело ответа пустое
  • 206 Partial Content — проверить докачку: заголовок Content-Range, правильный размер чанка

Негативные сценарии

  • 400 Bad Request — отправить невалидный JSON, пустое тело, отсутствие обязательных полей
  • 401 Unauthorized — запрос без токена, с истекшим токеном, с невалидным токеном
  • 403 Forbidden — запрос от пользователя без прав на данный ресурс
  • 404 Not Found — запрос к несуществующему endpoint, несуществующему ID ресурса
  • 405 Method Not Allowed — GET на endpoint, который принимает только POST
  • 415 Unsupported Media Type — отправить XML вместо JSON, если сервер ждёт JSON
  • 422 Unprocessable Entity — email без @, возраст = -5, сумма = 0, пустая строка в имени

Граничные случаи

  • Пустое тело — POST/PUT с пустым body — ожидаем 400 или 422
  • Огромный payload — отправить 10MB+ данных — проверить 413 Payload Too Large или 400
  • Спецсимволы — SQL-инъекции, XSS, Unicode, эмодзи в полях
  • Длинные строки — 10000 символов в поле имени — проверить 400 или 422
  • Отрицательные числа — возраст = -1, количество = -100 — ожидаем 422
  • Null vs отсутствие поля — проверить разницу между null и отсутствующим полем в JSON

Rate limiting

  • 429 Too Many Requests — превысить лимит запросов, проверить статус и заголовок Retry-After
  • Retry-After — проверить, что после указанного времени лимит сбрасывается
  • X-RateLimit-* — проверить заголовки X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  • Разные пользователи — rate limit считается на пользователя или на IP? Проверить оба сценария

Заголовки ответа

  • Content-Type — проверить, что соответствует ожидаемому (application/json, text/html)
  • Cache-Control — проверить no-cache, no-store, max-age для разных типов ответов
  • ETag / Last-Modified — проверить условные запросы (If-None-Match → 304)
  • CORS — проверить Access-Control-Allow-Origin, методы, заголовки
  • Content-Encoding — проверить gzip/brotli сжатие ответа
  • Content-Length — проверить соответствие фактическому размеру тела

Типичные ошибки при тестировании HTTP-статусов

  • Проверять только 200 OK — забывают про 201 (создание), 204 (удаление), 304 (кэш). Каждый метод имеет свой ожидаемый статус
  • Не проверять заголовки ответа — статус может быть 200, но Content-Type: text/html вместо application/json — это баг
  • Игнорировать 429 — rate limit может сломать автотесты. Всегда проверять Retry-After и делать паузу
  • Путать 401 и 403 — 401: нет аутентификации. 403: аутентификация есть, но нет прав. Разные сценарии
  • Не проверять тело ошибки — 400/422 должны возвращать понятное сообщение об ошибке, а не просто статус
  • Игнорировать 3xx — редиректы нужно проверять: куда ведёт, сохраняется ли метод, есть ли циклы
  • Не проверять 5xx — 500/502/503 должны быть обработаны клиентом. Падать с ошибкой — неправильно
  • Сравнивать статусы как числа — лучше проверять диапазон (2xx, 4xx), а не конкретный код, если спецификация допускает варианты
  • Не проверять CORS — если API вызывается из браузера, CORS-заголовки критичны. Preflight-запросы (OPTIONS) тоже нужно тестировать
  • Забывать про HEAD и OPTIONS — HEAD должен возвращать те же заголовки, что GET, но без тела. OPTIONS — список разрешённых методов

Источники

  • Винтерингем — «Тестирование веб-API», 2024
  • Jain — «Learn API Testing», 2022
  • MDN Web Docs — HTTP Status Codes
  • RFC 7231 — HTTP/1.1 Semantics and Content
  • Куликов С. — «Тестирование ПО. Базовый курс», гл. 2.7

Report Page