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

Какие знаешь группы кодов ответа сервера?

1.2 Junior🔥 202 комментариев
#Веб-тестирование#Клиент-серверная архитектура#Тестирование API

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

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

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

Коды ответа сервера (HTTP Status Codes)

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

Все коды разделены на пять классов (групп), определяемых первой цифрой:

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

Это промежуточные коды, указывающие, что запрос принят и обработка продолжается. В повседневном тестировании встречаются редко, но важны для понимания процессов.

  • 100 Continue: Сервер готов принимать тело запроса после заголовков.
  • 101 Switching Protocols: Сервер соглашается переключить протокол (например, с HTTP на WebSocket).

2xx: Success (Успешные)

Наиболее желаемая группа в позитивном тестировании. Коды подтверждают, что запрос был успешно принят, понят и обработан.

  • 200 OK: Базовый код успеха. Запрос выполнен, и ответ содержит ожидаемые данные (например, HTML страницу или JSON объекта).
{
    "status": 200,
    "message": "User data retrieved successfully"
}
  • 201 Created: Успешно создан новый ресурс (например, после POST запроса на создание пользователя). Ответ обычно содержит ссылку (Location header) на созданный объект.
  • 204 No Content: Запрос выполнен успешно, но в ответе нет тела (например, после успешного DELETE).

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

Коды указывают клиенту на необходимость дополнительных действий для завершения запроса (часто — автоматического перенаправления на другой URL).

  • 301 Moved Permanently: Ресурс был постоянно перемещен на новый URL. Браузеры и клиенты обычно кэшируют это и все будущие запросы отправляют на новый адрес.
  • 302 Found (или 307 Temporary Redirect): Ресурс временно доступен по другому URL. Перенаправление не должно кэшироваться для будущих запросов.
  • 304 Not Modified: Важен для производительности. Клиент уже имеет кэшированную версию ресурса (If-Modified-Since), и она не изменилась. Сервер отвечает без тела, указывая использовать кэш.

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

Критически важная группа для тестирования API и негативных сценариев. Коды означают, что проблема в запросе клиента: неверный синтаксис, отсутствие авторизации, попытка получить несуществующий ресурс.

  • 400 Bad Request: Общая ошибка, когда сервер не может понять запрос из-за неверного синтаксиса (например, malformed JSON).
POST /api/users
Content-Type: application/json

{"name": "John", "age": }  // Неправильный JSON - ответ 400
  • 401 Unauthorized: Запрос требует авторизации, но она не предоставлена или неверна.
  • 403 Forbidden: Сервер понял запрос, но отказывается его выполнить из-за недостатка прав (в отличие от 401, где можно попробовать авторизоваться).
  • 404 Not Found: Самый известный код. Сервер не может найти запрашиваемый ресурс (несуществующий URL или ID объекта).
  • 409 Conflict: Запрос конфликтует с текущим состоянием ресурса (например, попытка создать пользователя с уже существующим email).

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

Коды сигнализируют о том, что сервер не смог выполнить корректный запрос из-за внутренней ошибки. Это прямые указания на дефекты в backend-логике, конфигурации или инфраструктуре.

  • 500 Internal Server Error: Общая, "пугающая" ошибка сервера, когда что-то пошло не так, но конкретная причина не указана (например, необработанное исключение в коде).
  • 502 Bad Gateway: Сервер, действуя как прокси или gateway, получил недействительный ответ от upstream-сервера.
  • 503 Service Unavailable: Сервер временно не может обработать запрос из-за перегрузки или обслуживания. Часто сопровождается Retry-After заголовком.
  • 504 Gateway Timeout: Прокси-сервер не получил ответ от upstream-сервера в ожидаемое время.

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

  • Автотесты API: Мы явно проверяем ожидаемый статус-код в assertions.
import requests
response = requests.post('https://api.example.com/login', data={'user': 'test'})
assert response.status_code == 401  # Ожидаем ошибку авторизации без пароля
  • Анализ логов и мониторинг: Рост количества 5xx ошибок в мониторинге — прямой сигнал для начала investigation.
  • Тест-кейсы: Для негативных сценариев мы заранее определяем ожидаемый код ошибки (например, 404 для несуществующего ID, 400 для невалидных данных).
  • Диагностика вручную: При исследовании бага первым шагом часто является проверка фактического статус-кода в сети (F12, Network tab).

Таким образом, глубокое понимание групп и конкретных кодов позволяет QA Engineer не только формально проверять соответствие спецификации, но и эффективно диагностировать проблемы, предсказывать поведение системы и создавать более надежные и осмысленные тесты.