Сервер всегда возвращает тело ответа при HTTP-коде 500 (Internal Server Error)?

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

Ответ

Нет, сервер не обязан возвращать тело ответа при статусе 500. Согласно спецификации HTTP, тело ответа для кодов состояния ошибки является опциональным.

На практике:

  • Чаще всего тело есть. Современные API и фреймворки обычно возвращают JSON с деталями ошибки для упрощения отладки.
    {
        "error": "Internal Server Error",
        "message": "Database connection failed",
        "traceId": "abc-123"
    }
  • Тело может отсутствовать в случае критического сбоя на уровне веб-сервера (например, Nginx, Apache) до того, как запрос достигнет backend-приложения.

Важно для тестирования:

  1. Всегда проверяйте наличие тела ответа перед попыткой его парсинга.
  2. Пишите устойчивые проверки в тестах.

Пример проверки в Postman/Newman:

pm.test("Status is 500", function () {
    pm.response.to.have.status(500);
});

// Проверяем, есть ли тело ответа и содержит ли оно JSON с полем 'error'
if (pm.response.text().trim() !== '') {
    try {
        const jsonData = pm.response.json();
        pm.test("Response contains error details", function () {
            pm.expect(jsonData).to.have.property("error");
        });
    } catch (e) {
        // Тело есть, но это не JSON
        console.log("Response body is not JSON:", pm.response.text());
    }
}