Обязателен ли body в HTTP запросе
Что проверяют
Вопрос звучит теоретически, но на позиции тестировщика проверяют другое: умеете ли вы превратить знание протокола в набор проверок. Заодно смотрят, отличаете ли вы требование стандарта от поведения конкретного инструмента.
Как отвечать
Тело необязательно. Наличие тела определяют заголовки Content-Length или Transfer-Encoding: chunked, а не метод. У GET, HEAD, OPTIONS тела обычно нет, у POST, PUT, PATCH обычно есть, у DELETE как договорились в конкретном API. Ответы 204 и 304, а также ответ на HEAD, тела не имеют.
Дальше переводите в проверки, это и есть ваша часть ответа:
- пустое тело там, где сервис его ждёт: ожидается
400, а не500и не тихое создание пустой записи; - тело без заголовка
Content-Typeи с чужим типом: ожидается415; - невалидный JSON, лишние поля, поля со значением
null, вложенность глубже ожидаемой; Content-Length, не совпадающий с реальной длиной, и оборванное соединение на середине передачи;- тело больше лимита: должен быть
413, а не таймаут; - тело у
GET: проверяем, что сервис его игнорирует, а не применяет тихо как фильтр.
И сверяйте результат не по коду ответа, а по состоянию системы: что записалось в базу, ушло ли событие, что будет при повторе того же запроса.
Где спотыкаются
Останавливаются на определении. Вопрос закрыт за три предложения, а интервьюер ждал продолжения про тест-дизайн, и пауза читается как предел знаний.
Второе: путают ограничение инструмента с ограничением протокола. Часть клиентов тело у GET просто не отправляет, и отсюда делается вывод «стандарт запрещает». Стандарт не запрещает, он не определяет семантику, а это разные утверждения.
Третье: проверяют только успешный сценарий. Позитивный кейс проходит, обработка пустого и битого тела остаётся непокрытой, и падает потом ровно там.