Всем привет. Я в профессии QA уже больше 4-х лет. Не так давно создал свой сайт для тестировщиков (смотрите в профиле или в конце статьи) и канал в ТГ. Меня это затянуло, и я решил ещё начать писать статьи. Так что приятно со всеми познакомиться и прошу к ознакомлению :)
Что такое HTTP статус-код
HTTP статус-код – это трёхзначное число, которое возвращает сервер в ответ на запрос клиента. Код показывает, как сервер обработал запрос и что делать с ним дальше. Где мы их видим?
Например, в devtools во вкладке Network (ниже пример).
Но что означают эти трёхзначные числа, есть ли в них смысл? Ответ – «Да», и понять их довольно просто.
Группы статус-кодов
Всего существует 5 групп, где каждая группа отвечает за что-то своё. Эти коды помогают понять, правильно ли сервер реагирует на запроc. Группы делятся на сотни и ниже немного о каждой:
1xx ℹ️ Информационные – сервер говорит: «Я тут, всё принял, обрабатываю! Не паникуй, просто немного подожди».
2xx ✅ Успешно – всё прошло успешно и бояться нечего.
3xx ➡️ Перенаправления (редиректы) – как поход в больницу: ты заходишь в один кабинет, а тебе говорят: «Тут больше не принимают, тебе нужно в кабинет 302», – и ты идёшь туда.
4xx ❌ Ошибки клиента – у нас проблема в запросе, а не на стороне сервера.
5xx 🔥 Ошибки сервера – всё просто: какие-то неполадки на стороне сервера.
Почему тестировщики должны знать статус-коды
Казалось бы, всё понятно, и зачем знать что-то ещё, кроме групп? Возможно, кому-то этого и достаточно, но мы с вами доблестные тестировщики, которые хотят знать точно, в чём проблема. Нам недостаточно знать, что «на клиенте просто какая-то ошибка», ведь зная подробности, мы можем избежать неловкости. Например:
Пришли мы на работу. Заварили себе кофе, садимся за компьютер, решаем зайти в проект – и видим «403 Forbidden». Бежим сломя голову к разработчику и, запыхавшись, кричим: «Сервер не пускает!!! Всё сломалось!!!».
И вместо ожидаемых криков «БЫСТРЕЕ ЧИНИМ» нам спокойно отвечают:
«Спокойно… 403 значит, у тебя просто нет прав к ресурсу».
Или, если бы это была 401 ошибка:
«Спокойно… 401 значит, что ты не авторизован или ты не добавил токен».
Дальше небольшой список, чем нам помогают статус-коды:
- Быстро находить ошибки без лога: по статусу можно сразу понять, где сбой – на клиенте, сервере или из-за авторизации.
- Проверять корректность API: при тестировании REST-сервисов важно, чтобы каждый эндпойнт возвращал правильный код.
- Общаться с разработчиками на одном языке: «Я вижу, что POST /login возвращает 200 вместо 401, когда токен пустой». И всё – разработчик уже не спорит, а уважительно шепчет, какой вы молодец (ну или нет).
Теперь рассмотрим самые популярные и самые необходимые, на мой взгляд, статус-коды в каждой группе.
ℹ️ 1xx: информационные
Я бы сюда не стал ничего добавлять: группа 1xx почти не используется для проверок, но всё же расскажу про 1–2 статуса для ясности.
100 Continue ⏳ – обозначает «нормальную работу». Указывает, что пользователь сделал корректный запрос, и сервер начал его обрабатывать.
102 Processing ⚙️ – запрос в обработке (долгие задачи).
🌟 2xx: успешные
200 OK ✅ – один из самых популярных, но при этом незаметных кодов. Он указывает, что передача данных между сервером и пользователем завершилась, и всё прошло так, как должно.
201 Created ➕ – статус-код, который сервер возвращает, когда новый ресурс успешно создан в результате запроса (обычно POST). Это не просто «всё ок» (200), а конкретное «я сделал новую запись в базе, и вот её адрес!».
204 No Content 🗑 – сервер говорит: «Всё сделал, но отвечать нечем!». Это статус успеха без тела ответа – идеально подходит для операций, где результат и так ясен (удаление, очистка, обновление без возврата данных).
➡️ 3xx: перенаправления
301 Moved Permanently 🔄 и 302 Found ➡️ – это «братья-редиректы», которые сервер использует, чтобы сказать: «Ты заблудился, но я помогу!». Разница между ними критически важна для SEO, кеширования и тестирования.
В чём же разница?
- 301 – как переезд в новую квартиру: «Всё, старый адрес в прошлом!».
- 302 – как ремонт в офисе: «Подождите неделю, потом возвращайтесь».
301 Moved Permanently 🔄 – означает, что запросы на этот ресурс (а также последующие запросы) следует перенаправить на указанный URL («переехал НАВСЕГДА»).
302 Found ➡️ – говорит пользователю, что местоположение запрашиваемого веб-документа было временно изменено, а код состояния 302 включает данные о новом размещении, к которому пользователь может делать запрос («временно не тут» – возвращайся на старый URL).
😤 4xx: клиентские фейлы
400 Bad Request ❌ - Запрос не обрабатывается правильно в связи с синтаксической ошибкой. Сервер не понял запрос из-за синтаксиса или формата.
Пример:
POST /api/users
{ "name": "Иван, "email": }
Криво написан JSON: нет закрывающей кавычки в имени «Иван» → 400 Bad Request.
401 Unauthorized – нет токена. Используется для ресурсов, которые требуют авторизации. Код 401 информирует, что предварительную авторизацию отклонили, поскольку переданные пользовательские данные были неверны.
403 Forbidden – «Ты авторизован, но сюда нельзя!». Есть токен, но прав недостаточно. Админ-ресурс → обычный user?
404 Not Found – настоящая классика в статус-кодах, её знают и видели все. Ресурс не существует: страница удалена, не найдена или вы ввели неверный адрес. Перепроверьте введённый URL.
💥 5xx: ошибки сервера
500 Internal Server Error – самая популярная, на мой взгляд, ошибка из 5xx. Это «серверные крики о помощи».
503 Service Unavailable – «Я жив, но сейчас не могу ответить!». Сервер отказывается работать. Возможно, возникли технические причины, из-за которых сервер на определённое время не способен обработать запросы. Допустимо использовать в случаях, когда на сайт есть повышенный спрос, но у сервера нет возможности обрабатывать все входящие запросы.
Заключение
HTTP статус-коды – один из базовых, но мощных инструментов QA-специалиста. Не нужно стараться запомнить все, большинство и правда вам не пригодится. Если возникнет необходимость быстро узнать какой-либо статус, смело заходите и смотрите на моём сайте: https://qaspace.ru/instruments/status-kod
Надеюсь, статья вам понравилась, и вы захотите поддержать меня, подписавшись на мой канал в Telegram: https://t.me/qualityAssuranceSpace и посетив мой сайт для QA: https://qaspace.ru/
Всем спасибо :)