Какие знаешь распространённые четырёхсотые ошибки?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Распространённые HTTP ошибки 4xx
HTTP ошибки 4xx (Client Error) указывают, что проблема возникла на стороне клиента (например, браузера или приложения). Эти коды означают, что сервер не может выполнить запрос из-за некорректных действий пользователя или неправильно составленного запроса. Знание этих ошибок критически важно для QA Engineer, поскольку они часто возникают при тестировании веб-приложений и API, и их анализ помогает локализовать дефекты в клиентской логике или конфигурации.
Основные ошибки и их причины
400 Bad Request
Самая распространённая ошибка. Сервер не может обработать запрос из-за синтаксической ошибки или некорректной структуры.
- Примеры причин: Неверный формат JSON в теле запроса, отсутствующие обязательные заголовки, неправильная кодировка.
- Пример для тестирования API:
import requests
# Неправильный JSON (лишняя запятая)
invalid_json = '{"name": "John", "age": 30,}'
response = requests.post('https://api.example.com/users', data=invalid_json)
print(response.status_code) # Вероятно, 400
401 Unauthorized
Ошибка аутентификации. Клиент не предоставил необходимые учётные данные или они неверны.
- Примеры: Отсутствие токена
Authorization, неверный логин/пароль, просроченный сессионный ключ. - Важно: Часто отличается от 403 Forbidden (401 — "ты неизвестен", 403 — "ты известен, но нет прав").
403 Forbidden
Сервер понял запрос, но отказывается его выполнить из-за недостатка прав.
- Примеры: Попытка доступа к административной странице обычным пользователем, ограничение по IP-адресу.
- Тестовый сценарий: Проверить доступ разных ролей пользователей (user, admin, guest) к защищённым ресурсам.
404 Not Found
Очень известная ошибка. Сервер не нашёл запрашиваемый ресурс.
- Причины: Неверный URL, удалённая страница, ошибка в маршрутизации (роутинге) приложения.
- Для QA: Проверка всех публичных ссылок сайта, тестирование API endpoints после изменений.
405 Method Not Allowed
HTTP метод не разрешён для данного ресурса.
- Пример: Попытка отправки
POSTзапроса на endpoint, который принимает толькоGET. - Код для проверки:
// Пример с использованием fetch API
fetch('https://api.example.com/data', { method: 'PUT' })
.then(response => {
if (response.status === 405) {
console.error('Method PUT not allowed here');
}
});
408 Request Timeout
Сервер решил прекратить ожидание отклика клиента, так как запрос не был завершён в установленный срок.
- Частая причина: Проблемы с сетью клиента, слишком большие файлы для upload на медленном соединении.
409 Conflict
Запрос конфликтует с текущим состоянием ресурса на сервере.
- Классический пример: Попытка обновления данных, которые уже были изменены другим пользователем (конфликт версий), или создание дублирующего ресурса (например, пользователя с уже существующим email).
- Актуально для систем с параллельным редактированием.
429 Too Many Requests
Клиент превысил лимит запросов. Используется для защиты от DDoS и brute-force атак.
- Реализация: Rate Limiting (ограничение по количеству запросов в секунду/минуту).
- Тестирование: Проверить поведение системы при интенсивных автоматизированных запросах.
Практическое значение для QA
Понимание 4xx ошибок позволяет:
- Эффективно анализировать логи приложения и сервера.
- Составлять точные баг-репорты с указанием конкретного кода и контекста.
- Тестировать обработку ошибок на стороне клиента (правильные сообщения для пользователя).
- Проверять безопасность: например, убедиться, что попытка доступа к
/adminбез прав возвращает 403, а не 404 (что может скрыть существование ресурса). - Валидировать API: использовать статусы как критерий корректности работы endpoints в тестах автотестов.
В современном API-тестировании (REST, GraphQL) проверка ожидаемых HTTP статусов является базовым элементом тест-кейсов. Например, успешное создание ресурса должно возвращать 201 Created, а попытка создать его с невалидными данными — 400 Bad Request. Мониторинг и анализ этих ошибок в production также помогает выявлять проблемы с клиентскими приложениями или некорректное использование API.