Ответ 1
Тело является необязательным для всех кодов ошибок 4xx
:
За исключением случаев, когда он отвечает на запрос HEAD, сервер СЛЕДУЕТ включает объект, содержащий объяснение ситуации ошибки, и является ли это временным или постоянным условием.
То же самое для 5xx
:
За исключением случаев, когда он отвечает на запрос HEAD, сервер СЛЕДУЕТ включает объект, содержащий объяснение ситуации ошибки...
(СЛЕДУЕТ означает, что действительно, они должны, но это НЕ ДОЛЖНО.)
Сообщения 1xx
не содержат тела, насколько я могу судить. 201
(в дополнение к 204
и 205
) не нужно иметь тело. 3xx
представляют собой смешанный мешок, но тело необязательно для многих из них.
Источник: HTTP/1.1: определения кода состояния.
Правила для информации о длине сообщения описаны в HTTP Message - 4.4 Длина сообщения. Это не совсем тривиально.