HTTP статус коды

HTTP Статус коды: Ошибки сервера (5xx)

📚 24 вопросовПройти тест →
Лекция

HTTP Статус коды: Ошибки сервера (5xx)

HTTP статус коды

Статус коды: ошибки сервера (5xx)

Введение: авария на кухне 🔧

5xx — это сигнал: запрос правильный, но сервер не справился.
Клиент здесь не виноват — проблема на стороне системы.
💡 Совет: 5xx — повод проверить логи, а не клиента.
Вывод: 5xx = «проблема у сервера».

Проблема → решение

Проблема: если всегда отдавать 500, никто не понимает, где сбой.
Решение: различать типы ошибок: инфраструктура, шлюз, таймауты.
Вывод: правильный 5xx ускоряет диагностику.

Чем помогает и как работает

5xx‑коды показывают, что проблема на стороне сервера, а не клиента. Это помогает понять, что запрос нужно повторить или эскалировать.
Как это работает:
  1. Сервер получает запрос, но внутри происходит сбой.
  2. Возвращает 5xx и пишет ошибку в логи.
  3. Клиент может повторить запрос или показать сообщение.
Вывод: 5xx отделяют серверные сбои от ошибок клиента.

Ключевые термины (простыми словами)

  • 5xx — ошибки сервера.
  • Gateway (шлюз) — сервис‑посредник между клиентом и сервером.
  • Timeout — сервер не дождался ответа.
  • Retry — повторный запрос.
  • Correlation ID — идентификатор запроса в логах.
Вывод: термины помогают искать корень проблем.

Самое важное (must‑know)

  • 500 — ошибка приложения (баг), не «что-то пошло не так».
  • 502 vs 504: 502 — плохой ответ от upstream, 504 — таймаут.
  • 503 = временная недоступность, и нужен Retry-After.
  • Correlation ID в логах обязателен для расследований.
  • Не прячьте ошибки под 200 — это ломает клиентов и мониторинг.
Вывод: эти правила — основа правильной эксплуатации API.

1. 500 Internal Server Error

Назначение: общая ошибка сервера.
Простыми словами: сервер сломался из‑за внутренней ошибки.
Аналогия: на кухне сломалась плита.
Пример:
HTTP/1.1 500 Internal Server Error
🔎 Как это происходит на практике:
  1. Клиент отправляет POST /orders.
  2. Внутри приложения падает ошибка (исключение).
  3. Сервер возвращает 500 и пишет ошибку в лог с correlation ID.
Когда использовать: непредвиденный сбой, ошибка в коде.
Вывод: 500 = «сервер сломался».

2. 502 Bad Gateway

Назначение: шлюз получил плохой ответ от сервиса.
Простыми словами: ответ есть, но он «сломанный» или неподдерживаемый (не тот формат, битый документ, неверные заголовки).
Аналогия: официант не получил заказ от кухни.
Пример:
HTTP/1.1 502 Bad Gateway
🔎 Как это происходит на практике:
  1. Клиент обращается к API‑шлюзу GET /payments.
  2. Шлюз получает от upstream битый или невалидный ответ.
  3. Шлюз возвращает 502 Bad Gateway клиенту.
Когда использовать: API‑шлюз, прокси, балансировщик.
Вывод: 502 = «проблема у upstream».

3. 503 Service Unavailable

Назначение: сервис временно недоступен.
Простыми словами: сервер перегружен или на обслуживании, нужно подождать.
Аналогия: ресторан закрыт на уборку.
Пример:
HTTP/1.1 503 Service UnavailableRetry-After: 120
🔎 Как это происходит на практике:
  1. Сервис перегружен или на обслуживании.
  2. Отдаёт 503 и Retry-After: 120.
  3. Клиент ждёт и повторяет запрос.
Когда использовать: перегрузка, maintenance. Retry-After обязателен.
Вывод: 503 = «попробуйте позже».

4. 504 Gateway Timeout

Назначение: шлюз не дождался ответа.
Простыми словами: запрос ушёл в сервис, но тот не ответил вовремя.
Аналогия: официант не дождался блюда.
Пример:
HTTP/1.1 504 Gateway Timeout
🔎 Как это происходит на практике:
  1. Клиент отправляет запрос через шлюз.
  2. Upstream не отвечает вовремя.
  3. Шлюз возвращает 504 Gateway Timeout.
Когда использовать: долгие операции, таймауты.
Вывод: 504 = «время ожидания истекло».

5. 507 Insufficient Storage

Назначение: на сервере не хватает места.
Простыми словами: сервер не может записать данные из‑за заполненного диска.
Аналогия: склад переполнен.
Пример:
HTTP/1.1 507 Insufficient Storage
🔎 Как это происходит на практике:
  1. Клиент загружает файл или создаёт ресурс.
  2. Сервер не может записать данные (диск переполнен).
  3. Возвращает 507 Insufficient Storage.
Когда использовать: переполнение хранилища.
Вывод: 507 = «нет места».

Таблица 5xx

КодСмыслКогда использовать
500общий сбойошибка в коде
502плохой шлюзсбой upstream
503сервис недоступенперегрузка/maintenance
504таймаутсервис не ответил
507нет местазаполнен диск

Часто спрашивают на собеседованиях

  • 500 vs 503? 500 — неожиданная ошибка, 503 — временная недоступность.
  • 502 vs 504? 502 — плохой ответ, 504 — таймаут.
  • Нужно ли ретраить 5xx? да, но с лимитом и backoff.
  • Зачем correlation ID? искать ошибку в логах.
  • Когда использовать 503 и зачем Retry-After? 503 при перегрузке/maintenance, Retry-After подсказывает, когда повторить запрос.
  • Когда возвращать 507? когда сервер не может записать данные из-за переполненного хранилища.
  • Почему нельзя отдавать 200 при ошибке? это ломает клиентов и мониторинг, правильно вернуть 5xx. ✅ Вывод: понимание 5xx = грамотная эксплуатация API.

Типичные ошибки

Ошибка 1: всегда 500

❌ все сбои = 500
✅ различайте 502/503/504
Почему: иначе трудно диагностировать.

Ошибка 2: нет Retry-After

❌ клиент не знает, когда повторить
✅ добавляйте Retry-After для 503
Почему: это помогает клиентам.

Ошибка 3: скрывать ошибку

❌ 200 OK с полем error
✅ корректный 5xx
Почему: статус должен говорить правду.

Best Practices

  • Логируйте 5xx с correlation ID.
  • Добавляйте Retry-After для 503.
  • Разделяйте 502/504 для шлюза.
  • Не прячьте ошибки под 200.

Заключение

🎯 5xx — это сбой на сервере.
🎯 Точный код ускоряет расследование.
🎯 Клиент должен понимать, когда повторять запрос.
Теперь вы понимаете, как управлять серверными ошибками.
🎯

Проверьте знания

Закрепите материал — пройдите тест по теме «HTTP Статус коды: Ошибки сервера (5xx)»

Пройти тест →