Какие сетевые ошибки бывают и на чьей стороне они возникают?
Что проверяют
Умеете ли вы локализовать проблему до того, как завести баг: понять, дошёл ли запрос до сервера, и кому отдать задачу, фронту, бэкенду или админам. Следом часто дают конкретный случай: «в консоли ошибка CORS, чей это баг?»
Как отвечать
Идите по пути запроса, так ответ сам складывается в классификацию:
- DNS:
NXDOMAIN(имени нет) илиSERVFAIL, в браузереERR_NAME_NOT_RESOLVED. Причина бывает в настройках пользователя, у провайдера или в DNS-записях проекта. Проверка черезnslookupилиdig; - TCP:
connection refusedзначит, что хост ответил, но порт никто не слушает, сервис упал или не запущен.connection timed outзначит, что ответа нет вовсе, часто пакеты режет файрвол; - TLS: истёкший сертификат, неполная цепочка, чужое имя хоста. Это конфигурация сервера, хотя видит её клиент;
- HTTP 4xx: сервер считает, что ошибся клиент.
400кривой запрос,401нет аутентификации,403права не те,404ресурса нет,409конфликт состояния,422данные не прошли валидацию,429превышен лимит; - HTTP 5xx: сбой на стороне сервера.
500необработанное исключение,502прокси получил от бэкенда некорректный ответ,503сервис недоступен или перегружен,504прокси не дождался бэкенда.
Потом скажите главное: класс кода подсказывает, но не решает, чей баг. 404 из-за опечатки в URL на фронте это баг фронта, а 400 на корректные данные это ошибка валидации на бэкенде. Поэтому запрос воспроизводят через curl -v или копируют из вкладки Network как cURL, сверяют с контрактом API и прикладывают к багу идентификатор запроса из заголовков ответа. Трафик мобильных приложений смотрят через Charles или mitmproxy.
Где спотыкаются
Относят 404 к серверным ошибкам. Это клиентский класс, и первым делом проверяют сам запрос.
Считают CORS ошибкой браузера или фронта. Браузер лишь исполняет политику, а заголовок Access-Control-Allow-Origin выставляет сервер, туда баг обычно и уходит. При этом сам запрос мог дойти до бэкенда и выполниться.
Путают таймаут и отказ соединения. Отказ приходит мгновенно и говорит, что порт закрыт. Таймаут тянется секундами и указывает на сеть, файрвол или зависший сервис.