Что такое ошибка HTTP 500?

«Что такое ошибка HTTP 500?» — вопрос из категории Сети, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP 500 Internal Server Error — это общий код состояния ответа сервера, который указывает на то, что сервер столкнулся с непредвиденной ситуацией, которая помешала ему выполнить запрос клиента. Это ошибка на стороне сервера, а не клиента.

Распространенные причины:

  • Необработанные исключения в коде приложения: Например, NullReferenceException, деление на ноль, ошибка доступа к базе данных.
  • Проблемы с конфигурацией: Ошибки в файлах конфигурации сервера (например, web.config в IIS) или самого приложения (appsettings.json).
  • Недоступность зависимостей: Сервер не может подключиться к базе данных, внешнему API, кэшу или файловой системе.
  • Нехватка ресурсов: Исчерпание памяти, дискового пространства или достижение лимита подключений.
  • Ошибки времени выполнения: Сбои при компиляции динамического кода (например, в ASP.NET Razor Pages).

Пример и диагностика в ASP.NET Core:

// Пример действия, которое может вызвать 500 ошибку
[HttpGet("bad-endpoint")]
public IActionResult BadEndpoint()
{
    // Симуляция критической ошибки
    throw new InvalidOperationException("Произошла внутренняя ошибка сервиса!");
}

Как разработчик должен реагировать на 500 ошибки:

  1. Использовать централизованное логирование: Все необработанные исключения должны логироваться в систему (Serilog, Application Insights).
  2. Внедрить глобальный обработчик исключений: Использовать app.UseExceptionHandler() в ASP.NET Core для перехвата ошибок и возврата более безопасного для пользователя сообщения, при этом сохраняя детали в логах.
  3. Настроить пользовательские страницы ошибок: Показывать пользователю понятную страницу, а не стандартную ошибку сервера.
  4. Мониторинг: Настроить алерты на появление 5xx ошибок в системе мониторинга.