Documentation
¶
Overview ¶
Package httpbody — ЕДИНСТВЕННАЯ в дереве реализация потолка тела запроса.
Почему одна, а не по месту ¶
Потолок состоит из ДВУХ слоёв, и второй забывают. Реализация, поставившая только ограничитель чтения, выглядит исполненной и пропускает запрос, объявивший гигантскую длину: отказ приходит после того, как тело прочитано, — то есть ровно тогда, когда экономить уже нечего. Пока реализаций несколько, различие между ними НЕ ВЫРАЖЕНО и потому не может покраснеть; первая же правка одной из них не доедет до остальных, и не доедет молча.
Замер, из-за которого пакет заведён: до него реализаций в дереве было ТРИ, и объявленную длину проверяла ОДНА.
Два слоя и почему нужны оба ¶
- **объявленная длина сверх потолка** — отказ немедленный, ни одного байта тела не прочитано;
- **ограничитель чтения** — клиент вправе длину не объявлять (потоковая передача), и тогда единственное, что делает тело конечным, — обрыв чтения на потолке.
Первый слой без второго не ограничивает ничего: длину объявляет клиент. Второй без первого ограничивает память, но платит чтением.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Cap ¶
Cap ограничивает тело запроса потолком и отвечает, обязан ли вызывающий отказать НЕМЕДЛЕННО.
`true` означает: клиент объявил длину сверх потолка, тело не читалось, и вызывающий обязан отказать своей формой ответа. Форма отказа НЕ навязывается здесь намеренно — она разная у края, у вебхуков и у токен-эндпоинта, и сведение её к одной сломало бы чужие контракты ради опрятности.
`false` означает: тело обёрнуто ограничителем. Попытка прочитать больше потолка вернёт `*http.MaxBytesError`, и вызывающий вправе отличить её от прочих ошибок разбора.
Types ¶
This section is empty.