← Назад к вопросам

Какой статус код приходит при поломке сервера?

1.6 Junior🔥 251 комментариев
#Инструменты тестирования#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Статус-коды при сбоях сервера: Основная классификация

При поломке сервера или возникновении критической ошибки на стороне сервера чаще всего возвращаются статус-коды из категории 5xx (Server Error). Эти коды указывают, что сервер осознал наличие ошибки или не может выполнить запрос. В отличие от ошибок 4xx (которые говорят о проблеме на стороне клиента), 5xx ошибки — это ответственность сервера.

Основные статус-коды 5xx

  • 500 Internal Server Errorсамый распространенный и общий ответ при поломке сервера. Он означает, что сервер столкнулся с непредвиденной ситуацией, которая не позволяет ему выполнить запрос. Причины могут быть любыми: ошибка в коде приложения (непойманное исключение), сбой в конфигурации, проблемы с зависимостями (БД, внешние API), исчерпание памяти. Это "дефолтный" ответ, когда другие 5xx коды не подходят.

    HTTP/1.1 500 Internal Server Error
    
  • 502 Bad Gateway — этот код возвращает прокси-сервер или шлюз (например, Nginx, API Gateway), когда он, выступая в роли посредника, получил неверный ответ от вышестоящего сервера (upstream). Типичные причины: основной сервер приложения "упал", перегружен и не отвечает, или завершил соединение некорректно.

    HTTP/1.1 502 Bad Gateway
    Server: nginx/1.18.0
    
  • 503 Service Unavailable — сервер временно не может обработать запрос из-за перегрузки или планового технического обслуживания. Это часто лучший и более информативный ответ, чем 500, так как предполагает, что проблема носит временный характер. В заголовке ответа может присутствовать Retry-After, указывающий, когда можно повторить запрос.

    HTTP/1.1 503 Service Unavailable
    Retry-After: 3600
    
  • 504 Gateway Timeout — аналогично 502, этот код возвращает шлюз или прокси-сервер, но в случае, когда он не дождался ответа от вышестоящего сервера в отведенное время. Это прямо указывает на таймаут соединения. Причина — либо крайняя перегрузка upstream-сервера, либо слишком малое значение таймаута в конфигурации прокси.

    HTTP/1.1 504 Gateway Timeout
    

Практическое значение для QA Engineer

Понимание различий между этими кодами критически важно для эффективного тестирования и анализа логов:

  1. Локализация проблемы: 502/504 коды сразу направляют внимание на инфраструктуру и прокси-слой (Nginx, Load Balancer, CloudFront). 500 ошибка — это чаще проблема в самом приложении (backend-код).
  2. Написание автотестов: В сценариях негативного тестирования API мы можем ожидать конкретный статус-код.
    # Пример проверки на 503 при отключенном сервисе
    def test_service_unavailable_during_maintenance(self):
        response = requests.get(f"{self.base_url}/api/maintenance-endpoint")
        # Проверяем, что статус именно 503, а не просто любая ошибка 5xx
        assert response.status_code == 503, f"Expected 503, got {response.status_code}"
        assert "Retry-After" in response.headers
    
  3. Анализ мониторинга и алертов: Системы мониторинга (Prometheus, Grafana) должны по-разному реагировать на 500 (срочный алерт для разработчиков) и 503 (алерт для DevOps о возможной необходимости масштабирования).
  4. Взаимодействие с командой: Четкое указание в баг-репорте: "Получаем 504 Gateway Timeout от Nginx при попытке загрузки файла >100MB" — гораздо информативнее, чем "Сервер не отвечает".

Что еще может прийти при "поломке"?

Иногда сбой может проявляться не через 5xx код:

  • Ошибки соединения (Connection Error, Timeout) — если сервер полностью "лежит" и не принимает TCP-соединения, библиотека клиента (например, requests в Python) выбросит исключение, а HTTP-код получен не будет.
    import requests
    try:
        response = requests.get('http://упавший-сервер.ru', timeout=5)
    except requests.exceptions.ConnectionError:
        print("Сервер не найден или отверг соединение.")
    except requests.exceptions.Timeout:
        print("Таймаут соединения.")
    
  • 200 OK с ошибкой в телеантипаттерн, но иногда встречается: сервер технически работает и возвращает 200, но в теле ответа ({"status": "error", ...}) описывает внутреннюю ошибку. Это усложняет автоматическое обнаружение сбоев.

Вывод: Прямым и наиболее корректным ответом на поломку сервера является 500 Internal Server Error. Однако в реальных распределенных системах чаще встречаются 502 Bad Gateway и 504 Gateway Timeout от обратных прокси, что является важным индикатором для диагностики. Задача QA — не только фиксировать факт ошибки, но и правильно интерпретировать ее код для ускорения процесса исправления.

Какой статус код приходит при поломке сервера? | PrepBro