Что такое HTTP-статус 500 (Internal Server Error)?

«Что такое HTTP-статус 500 (Internal Server Error)?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Это общий код состояния HTTP, указывающий на критическую внутреннюю ошибку сервера, которая помешала ему выполнить запрос. Клиенту не сообщаются детали ошибки из соображений безопасности.

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

  • Необработанное исключение в коде приложения (NullPointerException, DivisionByZeroError).
  • Синтаксическая ошибка или сбой в скрипте сервера.
  • Сбои в подключении к зависимостям (база данных, внешний API, кэш).
  • Проблемы с конфигурацией сервера или разрешениями файловой системы.

Пример (ошибка в Python/Flask):

from flask import Flask
app = Flask(__name__)

@app.route('/calculate')
def calculate():
    # Необработанная ошибка приведет к статусу 500
    result = 10 / 0  # ZeroDivisionError
    return str(result)

Действия по диагностике:

  1. Изучить логи приложения (/var/log/, stdout/stderr контейнера) — там содержится стектрейс ошибки.
  2. Проверить доступность зависимостей (БД, Redis).
  3. Упростить запрос или воспроизвести его через curl/Postman.
  4. Настроить мониторинг и алертинг на появление 5xx ошибок.

Важно: Статус 500 — это симптом, а не диагноз. Реальная причина всегда ищется в логах бэкенда.