Заказчик пишет: «У нас форма не отправляется, клиенты жалуются». Ты открываешь сайт, кликаешь кнопку — визуально всё работает, спиннер крутится, но письмо не приходит. Новичок напишет: «Не работает, проверьте бэкенд». Профи за 15 секунд откроет Network tab, увидит HTTP 500 на эндпоинте /api/send-email, скопирует payload и response — и отправит разработчику точный баг-репорт с причиной. Первого попросят «описать подробнее», второму поставят задачу в работу мгновенно.
После прочтения ты научишься открывать Network tab в DevTools, читать коды статусов HTTP, отлавливать таймауты и проблемы CORS — и докладывать о багах API так, чтобы разработчик сразу понял суть проблемы без лишних вопросов.
Зачем тестировщику и саппорту нужен Network tab
Network tab — это рентген любого веб-приложения. Когда пользователь кликает кнопку «Отправить заявку», браузер делает HTTP-запрос на сервер (например, POST /api/leads), получает ответ — и визуально показывает результат (успех, ошибка, уведомление). Но если что-то сломалось, пользователь видит только «Ошибка сервера» или вообще зависший спиннер. А ты в Network tab видишь всю правду: какой запрос ушёл, что вернул сервер, сколько времени это заняло и где именно упало.
Это критично для трёх ролей на удалёнке:
Тестировщик (QA engineer). Проверяет, корректно ли фронтенд отправляет данные и правильно ли бэкенд их обрабатывает. Если форма регистрации не работает, тестировщик открывает Network tab, видит HTTP 400 Bad Request и payload {"email": "invalid"} — и сразу понимает: фронтенд не валидирует email перед отправкой. Баг-репорт с такими деталями закрывается за час, а не за три дня переписки.
Оператор техподдержки (саппорт). Когда клиент пишет: «Не могу войти в личный кабинет», саппорт открывает Network tab, воспроизводит проблему и видит HTTP 503 Service Unavailable на /api/auth/login. Вместо абстрактного «У клиента проблема с входом» ты пишешь разработчику: «Эндпоинт /api/auth/login возвращает 503, клиент не может авторизоваться. Логи запроса прикреплены». Время решения сокращается в разы.
Менеджер маркетплейсов и CRM-специалист. Настраивает интеграции (Usedesk, Omnidesk, Supabase) и проверяет, корректно ли данные улетают между системами. Если вебхук не сработал, открываешь Network tab, видишь HTTP 401 Unauthorized — и понимаешь: токен API устарел. Без этого навыка ты будешь неделями писать в саппорт платформы, а они ответят: «Проверьте логи на вашей стороне».
На рынке конца 2026 года такой навык — это базовый чек-лист для позиций «Junior QA», «Технический саппорт» и «Менеджер по работе с клиентами» с зарплатой от 35 000 до 60 000 ₽. Вакансий много, но работодатели жёстко фильтруют: если на собеседовании ты не можешь объяснить разницу между HTTP 400 и 500 — отказ.
Анатомия Network tab: что видит новичок в первый раз
Открой любой сайт, нажми F12 (или Cmd+Option+I на macOS), перейди на вкладку Network и обнови страницу (Ctrl+R / Cmd+R). Ты увидишь десятки строк — это список всех HTTP-запросов, которые браузер отправил для загрузки страницы: HTML, CSS, JavaScript, картинки, шрифты, запросы к API.
Основные столбцы, которые тебе нужны:
Name (Имя). Название ресурса или эндпоинта. Например, index.html, logo.png, /api/users/me. Если видишь /api/* — это запросы к бэкенду (API), именно их ты будешь анализировать при отладке.
Status (Статус). HTTP-код ответа. Это главная метрика успеха или провала запроса:
- 200 OK — всё хорошо, сервер вернул данные.
- 400 Bad Request — фронтенд отправил некорректные данные (например, невалидный JSON или пропущенное поле).
- 401 Unauthorized — пользователь не авторизован (токен истёк или отсутствует).
- 404 Not Found — эндпоинт не существует (опечатка в URL или API изменилось).
- 500 Internal Server Error — сервер упал, нужно смотреть логи бэкенда.
- 503 Service Unavailable — сервер перегружен или на обслуживании.
Type (Тип). Тип ресурса: document (HTML), script (JS), xhr или fetch (запросы к API). Фильтр по типу Fetch/XHR — твой главный инструмент: он покажет только API-запросы, скрыв всю статику.
Size (Размер). Сколько данных вернул сервер. Если видишь 0 B при коде 200 — возможно, бэкенд вернул пустой ответ (это баг, если ожидался JSON).
Time (Время). Сколько заняло выполнение запроса. Если видишь 30 секунд на запросе /api/search — это таймаут, нужно оптимизировать бэкенд или добавить кэширование.
Waterfall (Каскад). Временная диаграмма: когда запрос начался, сколько ждал соединения, сколько получал ответ. Помогает найти узкие места: если большая часть времени — это Waiting (TTFB), значит, бэкенд тормозит.
Новички боятся этой панели, потому что видят сотни строк. Но если применить фильтр Fetch/XHR, останется 5–10 запросов к API — и работать станет легко. Ещё один полезный трюк: кликни правой кнопкой на заголовки столбцов и включи Method — так ты сразу увидишь, какие запросы GET (чтение данных), POST (создание), PUT (обновление) или DELETE (удаление). Это помогает быстро ориентироваться, какой именно запрос мог вызвать проблему.
Пошаговый гайд: как открыть Network tab и начать отлавливать ошибки
Разберём алгоритм работы с Network tab от открытия до фиксации бага. Это универсальная схема для Chrome, Edge, Firefox и Safari.
Шаг 1. Открой DevTools и включи запись сетевых запросов.
Нажми F12 (Windows/Linux) или Cmd+Option+I (macOS). Перейди на вкладку Network. Убедись, что красная кнопка записи (Record) активна — если она серая, кликни её. Поставь галочку Preserve log (Сохранять лог) — это важно, чтобы запросы не исчезли при переходе на другую страницу. Если работаешь с мобильной версией сайта, включи режим эмуляции устройства (Ctrl+Shift+M) и выбери iPhone или Android из списка.
Шаг 2. Воспроизведи проблему и примени фильтр Fetch/XHR.
Кликни кнопку или форму, которая вызывает баг. Например, «Отправить заявку» или «Войти в аккаунт». В Network tab появится список запросов. Кликни фильтр Fetch/XHR (в верхней строке) — останутся только запросы к API, без картинок и скриптов. Если видишь пустой список после клика — возможно, JavaScript не выполнился из-за ошибки, проверь вкладку Console (там будут красные сообщения об ошибках).
Шаг 3. Найди «красный» запрос и открой детали.
Запросы с ошибками (HTTP 400, 401, 500, 503) подсвечиваются красным цветом или оранжевым (зависит от браузера). Кликни на такой запрос — справа откроется панель с вкладками. Тебе нужны четыре:
- Headers — URL, метод (GET, POST), заголовки (в том числе
Authorization). - Payload (или Request) — данные, которые фронтенд отправил серверу (например,
{"email": "user@example.com", "password": "123"}). - Response — ответ сервера (например,
{"error": "Invalid credentials"}). - Timing — детализация времени выполнения (DNS, соединение, ожидание, загрузка).
Шаг 4. Скопируй детали и зафиксируй баг.
Правой кнопкой мыши кликни на запрос → Copy → Copy as cURL (bash). Это скопирует полный запрос в формате cURL — ты сможешь повторить его в терминале или отправить разработчику. Альтернатива: сделай скриншот панели Response или скопируй текст ошибки. Запиши в баг-репорт:
- Эндпоинт (например,
POST /api/orders). - Код статуса (например,
500 Internal Server Error). - Payload (данные запроса).
- Response (ответ сервера с текстом ошибки).
- Время выполнения (если больше 5 секунд — это критично).
Этот алгоритм работает в большинстве случаев. Если ты видишь HTTP 200, но функция всё равно не работает — смотри JavaScript Console (вкладка Console в DevTools): возможно, фронтенд получил корректный ответ, но неправильно его обработал.
Разбор частых ошибок API: как их распознать в Network tab
Ошибки API делятся на три категории: клиентские (4xx), серверные (5xx) и сетевые (таймауты, CORS). Разберём каждую с примерами.
HTTP 400 Bad Request — фронтенд отправил мусор
Сервер получил запрос, но не смог его обработать: невалидный JSON, пропущенное обязательное поле или неправильный формат данных. Пример: ты отправляешь форму регистрации, но фронтенд передал {"email": "invalidemail"} вместо {"email": "user@example.com"}.
Как распознать: Код статуса 400. В Response часто есть подсказка: {"error": "Invalid email format"} или {"field": "email", "message": "required"}. Если видишь длинный список ошибок вроде {"errors": [{"field": "phone", "message": "required"}, {"field": "age", "message": "must be a number"}]} — это означает, что фронтенд отправил форму с множественными проблемами валидации.
Что делать: Проверь Payload — какие данные ушли на сервер. Если видишь опечатку (например, поле называется userEmail, а фронтенд отправил email) — это баг фронтенда. Если данные корректны, но бэкенд их не принимает — это баг API-валидации. Обрати внимание на тип данных: если в поле age ты отправил строку "25" вместо числа 25, некоторые API вернут 400.
HTTP 401 Unauthorized — токен устарел или отсутствует
Запрос требует авторизации, но токен (JWT, API-ключ) либо отсутствует, либо истёк. Типичная ситуация: пользователь зашёл в приложение утром, токен живёт 1 час — к обеду запросы падают с 401.
Как распознать: Код статуса 401. В Headers → Request Headers найди поле Authorization. Если там пусто или Bearer null — токен не передан. Если токен есть, но всё равно 401 — он истёк или невалидный. В Response может быть сообщение вроде {"error": "Token expired"} или {"message": "Unauthorized"}.
Что делать: Если ты саппорт, попроси клиента перелогиниться. Если ты тестировщик — проверь, обновляет ли фронтенд токен через refresh token (обычно это запрос POST /api/auth/refresh). Если ты настраиваешь интеграцию (например, вебхук в Usedesk) — проверь, корректен ли API-ключ в настройках. Частая ошибка: пробелы в начале или конце ключа при копировании.
HTTP 500 Internal Server Error — сервер упал
Запрос дошёл до сервера, но при обработке произошла ошибка: исключение в коде, недоступная база данных, некорректная логика. Это всегда баг бэкенда.
Как распознать: Код статуса 500. Response может быть пустым или содержать stack trace (длинный текст с путями к файлам). В продакшене stack trace обычно скрыт, ты увидишь только {"error": "Internal server error"}. Если видишь детальный stack trace с упоминанием конкретных файлов и строк кода — это означает, что сервер работает в режиме отладки (это уязвимость безопасности, но для тестировщика — полезная информация).
Что делать: Скопируй весь запрос (Copy as cURL), зафиксируй шаги воспроизведения и передай бэкенд-разработчику. Если ты работаешь с внешним API (например, Supabase), проверь статус-страницу сервиса (status.supabase.com) — возможно, проблема на их стороне. Полезно указать точное время ошибки (timestamp), чтобы разработчик мог найти её в серверных логах.
HTTP 404 Not Found — эндпоинт не существует
Запрос ушёл на несуществующий адрес. Причины: опечатка в URL, API изменилось (старая версия /api/v1/users заменена на /api/v2/users), или эндпоинт вообще не реализован.
Как распознать: Код статуса 404. В Response обычно HTML-страница с текстом «Not Found» или JSON вроде {"error": "Endpoint not found"}. Проверь Headers → Request URL — там может быть двойной слэш (/api//users) или лишний символ.
Что делать: Сравни URL в Network tab с документацией API (обычно есть на сайте типа docs.example.com/api). Если URL корректный, но всё равно 404 — возможно, бэкенд не задеплоил новую версию или удалил этот эндпоинт. Передай разработчику точный URL из Network tab.
Таймаут (timeout) — запрос завис
Запрос выполняется дольше заданного лимита (обычно 30 секунд) — и браузер его прерывает. В Network tab ты увидишь статус (failed) или net::ERR_CONNECTION_TIMED_OUT.
Как распознать: В столбце Time — аномально большое значение (например, 30.5 секунд). Запрос красный, статус — (failed). В некоторых браузерах ты увидишь треугольник с восклицательным знаком.
Что делать: Проверь Waterfall — если большая часть времени в Waiting (TTFB) (время до первого байта), значит, бэкенд тормозит. Возможные причины: медленный запрос к базе данных, бесконечный цикл в коде, отсутствие индексов в таблицах. Если в Stalled (ожидание соединения) — проблема с сетью или DNS. Зафиксируй это в баг-репорте с указанием точного времени и скриншотом Waterfall.
CORS-ошибка — бэкенд заблокировал запрос
Браузер отправил запрос, но бэкенд вернул HTTP 200 (или другой код), однако не разрешил доступ к ответу из-за политики CORS (Cross-Origin Resource Sharing). В Console ты увидишь красное сообщение: Access to fetch at 'https://api.example.com' from origin 'https://app.example.com' has been blocked by CORS policy.
Как распознать: В Network tab запрос может показывать HTTP 200, но в Console — ошибка CORS. Либо запрос показывает статус (failed) с нулевым размером ответа. При этом браузер мог отправить preflight-запрос (метод OPTIONS) перед основным POST/PUT — если preflight упал, основной запрос даже не уйдёт.
Что делать: Это баг бэкенда — разработчик должен добавить заголовок Access-Control-Allow-Origin в ответе сервера. Передай ему детали: URL API, origin фронтенда (домен сайта) и скриншот ошибки из Console. Если видишь preflight-запрос с методом OPTIONS — укажи это в репорте, так как проблема может быть в настройке заголовков для OPTIONS.
Знание этих шести категорий покрывает большую часть ошибок, которые ты встретишь на позициях технического саппорта или Junior QA. Чем быстрее ты научишься их различать — тем меньше времени потратишь на переписку с разработчиками.
Практический врез: как новичок и профи отлавливают один и тот же баг
Реальная задача из тестового задания на позицию QA-инженера (вакансия SaaS-стартапа, удалёнка, 52 000 ₽):
Кейс: «Пользователь заполняет форму обратной связи на сайте, кликает “Отправить” — видит сообщение “Ваше сообщение отправлено”, но письмо не приходит ни ему, ни в админку. Найдите причину и опишите баг».
❌ Ошибка новичка (отказ после тестового)
«Я протестировал форму. Нажал кнопку “Отправить”, появилось сообщение “Ваше сообщение отправлено”. Но письмо не пришло. Проверил спам — там пусто. Возможно, проблема с почтовым сервером. Нужно проверить бэкенд».
Почему отказ: Абстрактно, нет деталей. Не открыл Network tab, не посмотрел, какой запрос ушёл на сервер и что он вернул. Работодатель не понимает, в чём конкретно баг — на фронтенде, бэкенде или в SMTP-сервисе. Такой репорт бесполезен, потому что разработчик потратит ещё час на воспроизведение и диагностику.
✅ Эталонный ответ профессионала (оффер)
«Воспроизвёл баг, открыл DevTools → Network → фильтр Fetch/XHR. При отправке формы ушёл запрос POST /api/contact. Ответ: HTTP 200 OK, body: {"success": true, "message": "Message sent"}. Но при детальном анализе Response обнаружил: сервер возвращает успех, но в Headers → Response Headers отсутствует заголовок X-Email-Sent: true, который обычно подтверждает реальную отправку. Проверил через дополнительный запрос к /api/admin/logs (доступ предоставлен в тестовой среде) — там видна ошибка: SMTP connection failed: timeout to mail.example.com:587.
Баг: Фронтенд показывает ложноположительный успех. Бэкенд возвращает HTTP 200, даже если email физически не отправлен. Это вводит пользователя в заблуждение.
Рекомендации:
- Бэкенд должен возвращать HTTP 500 или 503, если SMTP не сработал.
- Фронтенд должен показывать ошибку пользователю: «Не удалось отправить сообщение. Попробуйте позже или свяжитесь с нами напрямую».
- Добавить retry-логику или асинхронную очередь (например, через Supabase Queue или RabbitMQ) для повторной отправки при временных проблемах SMTP.
Прикладываю cURL-команду для воспроизведения:
curl 'https://example.com/api/contact' \
-X POST \
-H 'Content-Type: application/json' \
--data-raw '{"name":"Test","email":"test@example.com","message":"Test message"}'
И скриншот Response с фальшивым success».
Почему оффер: Конкретика, детали, осмысленный анализ. Нашёл корневую проблему (SMTP timeout), указал, что фронтенд врёт пользователю, предложил решение и даже подсказал технологии для исправления. Работодатель понимает: этот человек не просто «тыкает кнопки», а мыслит системно и экономит время команды.
Разница между двумя подходами — это разница между зарплатой 35 000 ₽ и 52 000 ₽ на старте. Network tab — это не магия, это просто привычка открывать его каждый раз, когда что-то идёт не так.
Дополнительные сценарии: что делать, если Network tab не показывает очевидной проблемы
Бывают ситуации, когда все запросы в Network tab возвращают HTTP 200, но функция всё равно не работает. Вот три сценария, с которыми ты столкнёшься на реальных проектах.
Сценарий 1: Бэкенд вернул HTTP 200, но с пустым телом ответа.
Ты видишь Status: 200 OK, но в Response — 0 B или пустой JSON {}. Фронтенд ожидал список товаров, получил пустоту — и показал пользователю экран «Нет данных». Это не техническая ошибка (код 200 означает успех), но логическая: бэкенд должен был вернуть массив, но база данных пустая или запрос составлен неправильно. Зафиксируй это как баг с пометкой «Expected non-empty response».
Сценарий 2: JavaScript обработал ответ неправильно.
Бэкенд вернул корректный JSON: {"balance": 1000}, но фронтенд отобразил «Баланс: undefined». Открой Console — там будет ошибка вроде Cannot read property 'amount' of undefined. Фронтенд пытается прочитать response.amount, но в ответе поле называется balance. Это баг фронтенда, но без Console ты его не увидишь.
Сценарий 3: Запрос ушёл дважды, второй с ошибкой.
В Network tab ты видишь два запроса POST /api/checkout — первый с HTTP 200, второй с HTTP 409 Conflict. Что произошло? Пользователь дважды кликнул кнопку «Оплатить», первый запрос прошёл успешно, второй упал с ошибкой «Order already exists». Фронтенд должен блокировать кнопку после первого клика (disabled state). Это UX-баг, но ты его поймаешь только через Network tab.
Эти сценарии показывают, что Network tab — это не просто список кодов статусов, а инструмент для понимания всей цепочки взаимодействия браузера и сервера.
Анти-глянец: что неприятно в работе с отладкой API
Навык работы с Network tab открывает двери, но будь готов к реальным подводным камням этой ниши.
1. Монотонная рутина и сотни однотипных запросов. Если ты работаешь QA-инженером или техподдержкой, половину времени ты будешь смотреть на одни и те же ошибки: HTTP 500 на одном эндпоинте, HTTP 401 на другом. Когда за день ты открываешь Network tab 40 раз — это перестаёт быть интересным. Многие выгорают через 6–8 месяцев, потому что ожидали «крутую отладку», а получили конвейер однотипных баг-репортов.
2. Конфликты с разработчиками и игра в пинг-понг. Ты нашёл баг, написал детальный репорт с cURL и скриншотами — а разработчик отвечает: «У меня локально всё работает» или «Это не баг, это фича». Если ты джуниор, тебя могут не слушать. Придётся прокачивать не только технические навыки, но и умение аргументировать: показывать метрики (например, SLA первого ответа нарушен из-за таймаута), ссылаться на документацию API, приводить impact (сколько пользователей пострадало). Бывает, что на исправление очевидного бага уходит неделя переписки, потому что никто не хочет брать ответственность.
3. Зависимость от чужих систем и беспомощность. Если ты настраиваешь интеграции (Usedesk, Omnidesk, Supabase), треть проблем будут на стороне внешнего сервиса: их API упало, документация устарела, лимиты изменились без предупреждения. Ты открываешь Network tab, видишь HTTP 503 — и ничего не можешь сделать, кроме как написать в их саппорт и ждать. Это фрустрирует, особенно когда клиент давит: «Почему до сих пор не работает?». А ты понимаешь, что проблема вне твоего контроля, но объяснять это приходится тебе.
Эти минусы не должны тебя отпугнуть — но если ты романтизируешь профессию, реальность будет болезненной. Навык работы с Network tab — это билет в индустрию, но не панацея от рутины и не гарантия, что тебя сразу будут слушать.
Часто задаваемые вопросы
Можно ли использовать Network tab в мобильном браузере?
На Android и iOS встроенные браузеры не имеют полноценного DevTools. Но ты можешь подключить мобильное устройство к компьютеру через USB и открыть Remote Debugging: на Android — через Chrome DevTools (открой chrome://inspect в десктопном Chrome), на iOS — через Safari (меню Develop → подключённое устройство). Все запросы с мобильного устройства будут видны в Network tab на компьютере. Это критично для тестирования мобильных веб-приложений и PWA.
Что делать, если Response пустой или показывает HTML вместо JSON?
Если API должен возвращать JSON, но ты видишь HTML-страницу (например, страницу ошибки 404 веб-сервера), это значит, что запрос вообще не дошёл до приложения — либо неправильный URL, либо веб-сервер (Nginx, Apache) вернул свою стандартную ошибку. Проверь Headers → Request URL — возможно, там опечатка или лишний символ. Если Response вообще пустой (0 байт), но статус 200 — это баг бэкенда: сервер должен возвращать хотя бы {"success": true}. В некоторых случаях бэкенд может вернуть HTTP 204 No Content — это нормально для операций удаления, когда ответ не требуется.
Как понять, что проблема в бэкенде, а не в интернете?
Открой вкладку Timing у проблемного запроса. Если большая часть времени в Queueing или Stalled — проблема в сети или DNS (медленный интернет, блокировка провайдером, перегруженный роутер). Если основное время в Waiting (TTFB) — бэкенд тормозит (долгая обработка, медленная база данных, отсутствие индексов). Если в Content Download — большой ответ сервера (например, API вернул 10 МБ JSON вместо пагинации). Ещё один способ: открой несколько разных сайтов — если они тоже грузятся медленно, проблема точно в интернете.
Нужно ли учить cURL и Postman, чтобы работать с Network tab?
Не обязательно на старте. Network tab — это пассивный инструмент (ты видишь, что уже произошло), а Postman и cURL — активные (ты сам отправляешь запросы и тестируешь API без фронтенда). Но если хочешь перейти на позицию выше джуниора (например, QA Automation или API-тестировщик за 60 000+ ₽), знание Postman станет обязательным. Начни с Network tab — когда научишься читать запросы в браузере, переход на Postman займёт пару дней. Многие работодатели в вакансиях QA указывают Postman как must-have для мидл-позиций.
Как отличить баг фронтенда от бага бэкенда, если статус 500?
HTTP 500 — это всегда серверная ошибка, бэкенд обязан обработать любой корректный запрос. Но если фронтенд отправляет мусор (например, строку вместо числа в поле age), бэкенд может упасть с 500 вместо того, чтобы вернуть валидационную ошибку 400. В таком случае это баг обеих сторон: фронтенд должен валидировать данные перед отправкой, а бэкенд — корректно обрабатывать невалидные данные и возвращать 400 с понятным сообщением. В баг-репорте укажи оба момента и предложи исправить валидацию на обеих сторонах. Хороший тон — добавить, что фронтенд может использовать готовые библиотеки валидации (например, Yup или Zod для JavaScript).
Заключение
Network tab в DevTools — это не волшебная кнопка, которая решит все баги за тебя, но это главный инструмент, который отличает профи от новичка в техподдержке, тестировании и работе с интеграциями. Ты можешь прочитать десять статей про HTTP-коды, но пока не откроешь Network tab на реальном проекте и не поймаешь свой первый HTTP 500 с детальным Response — знание останется абстрактным. Начни прямо сейчас: открой любой знакомый сайт, активируй запись, кликни пару кнопок и изучи, какие запросы улетают на сервер. Через неделю практики ты будешь читать API-трафик быстрее, чем визуальный интерфейс — и это откроет тебе вакансии с зарплатой от 50 000 ₽ и выше, где ценят не просто исполнителей, а людей, которые умеют мыслить системно и докапываться до корневых причин проблем.
