Какие знаешь статусы ошибки 500?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Статусы ошибки 5XX: Серверные ошибки
Ошибки с статус-кодом 5XX в протоколе HTTP указывают на то, что сервер не смог выполнить корректный запрос клиента по причине внутренней ошибки на стороне сервера. Самый известный из них — 500 Internal Server Error, который является общим и неспецифичным. Однако спецификация HTTP/1.1 (RFC 7231) и другие RFC определяют ряд более конкретных статусов в этом диапазоне, которые помогают в диагностике. Как инженер по качеству, важно понимать разницу между ними для точного описания дефектов, анализа логов и коммуникации с разработчиками.
Основные статусы 5XX
Вот ключевые статусы, которые можно встретить в современных веб-приложениях и API:
- 500 Internal Server Error
* **Самый распространённый и общий статус.** Сервер столкнулся с непредвиденной ситуацией, которая не позволяет ему выполнить запрос. Причины могут быть любыми: необработанное исключение в коде (NullPointerException, DivisionByZero и т.д.), сбой в бизнес-логике, ошибка конфигурации сервера, проблема с подключением к базе данных, когда само приложение "упало".
* **Для QA:** Часто требует изучения логов приложения (application logs) на стороне сервера. Это отправная точка для исследования.
- 501 Not Implemented
* Сервер не поддерживает функциональность, необходимую для выполнения запроса. Например, клиент использует неизвестный метод HTTP (не GET, POST, PUT, DELETE) или запрашивает функционал, который ещё не реализован на сервере.
* **Пример:** Запрос методом `PATCH` к API, которое его не поддерживает.
```http
PATCH /api/users/123 HTTP/1.1
Host: example.com
...
<!-- Ответ сервера -->
HTTP/1.1 501 Not Implemented
```
3. 502 Bad Gateway
* Сервер, выступая в роли **шлюза или прокси**, получил недопустимый ответ от вышестоящего сервера. Типичная ситуация для архитектур с балансировщиками нагрузки (nginx, HAProxy), обратными прокси или микросервисами.
* **Причины:** Вышестоящий сервер (бэкенд-приложение) "упал", не ответил в таймаут, отправил некорректные или неполные заголовки.
* **Для QA:** Проблема часто не в самом приложении, а в инфраструктуре или доступности зависимого сервиса.
- 503 Service Unavailable
* Сервер временно не может обработать запрос из-за перегрузки или планового технического обслуживания. Это явное указание на то, что проблема временная.
* **Важный нюанс:** В заголовке ответа `Retry-After` сервер может указать, через сколько секунд или до какой даты клиенту стоит повторить запрос.
```http
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Content-Type: text/html
<html>...Сервер на обслуживании...</html>
```
5. 504 Gateway Timeout
* Сервер, выступая в роли **шлюза или прокси**, не дождался ответа от вышестоящего сервера в отведённое время. Это **ошибка таймаута**.
* **Ключевое отличие от 502:** При 502 вышестоящий сервер ответил, но ответ был "плохим" (битым). При 504 он просто не ответил вовсе. Частая причина — "подвисшие" (long-running) запросы к базам данных или внешним API.
- 505 HTTP Version Not Supported
* Сервер не поддерживает или отказывается поддерживать версию протокола HTTP, указанную в запросе. В современной веб-разработке встречается редко, но может возникнуть при попытке использовать устаревшие протоколы.
Практическое значение для QA Engineer
Понимание этих статусов критически важно в работе:
- Точное описание бага: Вместо "выдаёт ошибку 500" в отчёте можно указать: "При отправке запроса X возвращается статус 502 Bad Gateway, что указывает на недоступность бэкенд-сервиса Y". Это экономит время разработчикам.
- Анализ логов и мониторинга: Зная разницу между 502 и 504, можно целенаправленно искать проблемы в логах прокси-сервера (nginx) или логах самого приложения.
- Тестирование отказоустойчивости: При тестировании восстановления после сбоев (recovery testing) ожидаемыми ответами могут быть именно 503 или 504. Мы можем проверять, корректно ли сервер их возвращает и содержит ли полезные заголовки (например,
Retry-After). - Тестирование API: При негативном тестировании API отправка некорректных данных или вызов нереализованных методов должна возвращать ожидаемые статусы (500 при сбое в логике, 501 для неподдерживаемого метода).
Вывод: Хотя в повседневной речи все эти ошибки могут называться "ошибка 500", для профессионала важно различать Internal Server Error (500), Bad Gateway (502), Service Unavailable (503) и Gateway Timeout (504). Это не просто разные числа — это прямые указатели на разный слой и характер проблемы: код приложения, инфраструктура, временная перегрузка или таймаут зависимостей.