Что означает HTTP-статус 503 Service Unavailable?

Ответ

HTTP 503 Service Unavailable — это код состояния сервера, означающий, что сервер временно не может обработать запрос из-за перегрузки или планового технического обслуживания.

Ключевая особенность: Ошибка носит временный характер. Клиенту следует повторить запрос позже.

Типичные причины:

  • Пиковая нагрузка, исчерпание ресурсов (CPU, память, соединения с БД).
  • Сервер или зависимый микросервис находится на плановом обслуживании.
  • Сбой в балансировщике нагрузки или бэкенд-сервисе.

Заголовок Retry-After: Сервер может указать, когда стоит повторить запрос, с помощью опционального заголовка Retry-After.

HTTP/1.1 503 Service Unavailable
Retry-After: 120
Content-Type: application/json

{"error": "System under maintenance", "estimated_recovery": "2023-10-05T15:00:00Z"}

Retry-After может содержать:

  • Количество секунд (как в примере выше).
  • Дату и время в формате HTTP-date.

Действия при тестировании:

  1. Проверить логи сервера и мониторинг.
  2. Убедиться, что клиентское приложение корректно обрабатывает этот статус (не считает его фатальной ошибкой) и соблюдает Retry-After.
  3. В рамках нагрузочного тестирования — выявить порог, при котором сервер начинает отдавать 503.

Ответ 18+ 🔞

А, ну вот, классика жанра! HTTP 503, ёпта! Это когда твой сервер, такой весь из себя важный, внезапно заявляет: «А пошёл ты нахуй, я сейчас не могу, у меня голова болит».

По-русски это значит: сервак временно вырубился. Не навсегда, нет! Он просто прилёг, перегрузился, или ему там какие-то мартышлюшки в белых халатах проводят плановое техобслуживание, пока он под наркозом.

Суть в чём: Это временная поебень. Клиенту (то есть тебе, или твоему скрипту) надо не ныть, а просто подождать и пнуть запросом ещё разок попозже.

А почему это случается, спросишь ты? Да элементарно, Ватсон!

  • На сервер навалилась овердохуища народу — все ресурсы сожрали, CPU плавится, память кончилась, база данных в обмороке упала.
  • Его просто выключили на время, чтобы почистить от пыли или обновить.
  • Какой-нибудь соседний микросервис, от которого он зависит, взял и сдох, и наш герой теперь сидит в полной жопе.

Вот тут прикол! Умный сервер может тебе, такому настырному, даже подсказать, когда вернуться. Для этого есть специальная бумажка — заголовок Retry-After. Смотри, как это выглядит:

HTTP/1.1 503 Service Unavailable
Retry-After: 120
Content-Type: application/json

{"error": "System under maintenance", "estimated_recovery": "2023-10-05T15:00:00Z"}

Видишь? Он тебе прямо говорит: «Отстань на 120 секунд, я перекурю». Или может назначить точное свидание: «Заходи после трёх, в 15:00 по Гринвичу».

А что делать тестировщику или разработчику, когда эта хрень вылезает?

  1. Первым делом — не паниковать, а лезть в логи сервера и мониторинг. Там всё написано, кто виноват и что сломалось. Обычно какой-нибудь процесс съел всю память, и сервер накрылся медным тазом.
  2. Проверить своего клиента (приложение или скрипт). Он должен быть не идиотом и понимать, что 503 — это не конец света. Надо подождать и попробовать снова, а не орать «ВСЁ ПРОПАЛО!» и падать в обморок. И если сервер сказал «Retry-After: 3600», то не надо долбить его каждую секунду, пидарас шерстяной!
  3. Нагрузочным тестированием выяснить, на каком именно моменте твой сервер начинает сдавать позиции и материться кодом 503. Чтобы знать его предел прочности, прежде чем на него навалится реальная толпа пользователей и всё ебнёт.