Шпаргалка по кодам ответов HTTP
Код ответа — первое, на что смотрят во вкладке Network. Он сразу говорит, чья ошибка: если 4xx — виноват запрос, если 5xx — сервер. Ниже коды, которые встречаются в работе чаще всего, и типовые дефекты, которые за ними стоят.
Пять групп
| Группа | Смысл | Кто «виноват» |
|---|---|---|
| 1xx | Запрос принят, продолжаем | служебные, в интерфейсе почти не видны |
| 2xx | Успех | — |
| 3xx | Перенаправление | — |
| 4xx | Ошибка в запросе | клиент |
| 5xx | Ошибка на сервере | сервер |
2xx — успех
| Код | Когда | На что смотреть тестировщику |
|---|---|---|
| 200 OK | Запрос выполнен, в теле результат | Классика: 200 с телом {"error": "..."}. Успешный код при неуспешной операции — дефект |
| 201 Created | Ресурс создан | Должен быть заголовок Location со ссылкой на созданное |
| 202 Accepted | Принято в обработку, результата ещё нет | Проверьте, что интерфейс не рисует «готово» раньше времени |
| 204 No Content | Выполнено, тела нет (частый ответ на DELETE) | Тела быть не должно — если оно есть, это нарушение контракта |
3xx — перенаправление
| Код | Когда | На что смотреть |
|---|---|---|
| 301 Moved Permanently | Адрес изменился навсегда | Кэшируется браузером — ошибочный 301 живёт долго. Важно для SEO |
| 302 Found | Временно по другому адресу | Проверьте цепочку: 302 → 302 → 302 замедляет загрузку |
| 304 Not Modified | Не изменилось, берите из кэша | Обновили файл, а пользователь видит старый — смотрите заголовки кэширования |
| 307 / 308 | То же, что 302 / 301, но метод и тело сохраняются | При 301 POST может превратиться в GET и потерять данные |
4xx — ошибка в запросе
| Код | Когда | Типовой дефект |
|---|---|---|
| 400 Bad Request | Запрос не разобрать: битый JSON, нет обязательного поля | В ответе нет сведений, какое поле неверно — пользователю нечего показать |
| 401 Unauthorized | Не представились: токена нет, он истёк или неверен | Интерфейс показывает «ошибка сервера» вместо предложения войти заново |
| 403 Forbidden | Кто вы — понятно, но доступа нет | Самое интересное для тестирования ролей: обычный пользователь дёргает админский метод |
| 404 Not Found | Ресурса нет | 404 вместо 403 — иногда так специально прячут чужие данные, уточняйте |
| 405 Method Not Allowed | Адрес есть, метод не тот (DELETE вместо POST) | Должен быть заголовок Allow с перечнем методов |
| 408 Request Timeout | Клиент слишком долго слал запрос | Всплывает при загрузке больших файлов на слабой сети |
| 409 Conflict | Конфликт состояния: e-mail занят, версия устарела | Проверяйте одновременное редактирование из двух вкладок |
| 413 Payload Too Large | Тело больше лимита | Лимит в интерфейсе и лимит сервера расходятся — форма молча падает |
| 415 Unsupported Media Type | Не тот Content-Type | Забыли application/json — типичная ошибка в Postman |
| 422 Unprocessable Entity | Формат верный, значения — нет (возраст −5) | Граница с 400 размыта; главное — единообразие внутри проекта |
| 429 Too Many Requests | Слишком часто | Проверьте заголовок Retry-After и что интерфейс не долбит сервер в цикле |
5xx — ошибка на сервере
| Код | Когда | Что делать тестировщику |
|---|---|---|
| 500 Internal Server Error | Необработанное исключение | Всегда дефект. Приложите тело запроса, время и traceId — по ним найдут запись в логах |
| 502 Bad Gateway | Прокси получил мусор от приложения | Часто значит, что сервис упал или не поднялся |
| 503 Service Unavailable | Сервис недоступен: перегрузка или обслуживание | Проверьте, что интерфейс показывает человеческое сообщение, а не белый экран |
| 504 Gateway Timeout | Внутренний сервис не ответил вовремя | Ищите тяжёлый запрос: выгрузку, отчёт, поиск без ограничения |
- 200 с ошибкой в теле. Мониторинг такое не ловит, а пользователь видит сбой.
- 500 вместо 400. Некорректный ввод должен давать 400, а не падение сервера. Отправьте в поле числа строку — и посмотрите.
- Отсутствие 403 у чужих данных. Подставьте чужой id в адрес запроса: если данные вернулись — это уязвимость.
- 401 без обновления токена. Подождите, пока токен истечёт, и понажимайте кнопки.
Как проверить руками
Код виден в DevTools → Network в столбце Status. Тот же запрос можно повторить без интерфейса:
curl -i -X POST https://api.example.com/orders \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <токен>" \
-d '{"productId": 10, "qty": 1}'
Флаг -i печатает заголовки ответа вместе с кодом. Убрать Content-Type
и посмотреть, придёт ли 415, — проверка на одну команду.
Потрогать коды вживую можно в тренажёре «клиент API»: он поднимает учебный сервер прямо в браузере, и там есть задания и на 400, и на 403, и на 404. Теория с разбором — в открытом уроке коды ответов HTTP.
Это выжимка. Полный разбор — в курсе
В «Ручном тестировщике» 47 уроков и 36 тренажёров с проверкой результата. Часть уроков и четыре тренажёра открыты бесплатно.