Какие знаешь группы кодов ответа сервера?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Коды ответа сервера (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 не только формально проверять соответствие спецификации, но и эффективно диагностировать проблемы, предсказывать поведение системы и создавать более надежные и осмысленные тесты.