Ответ
Длина HTTP-запроса определяется заголовком Content-Length или Transfer-Encoding: chunked.
- Content-Length: точное количество байт в теле запроса.
POST /upload HTTP/1.1
Content-Length: 42
- Transfer-Encoding: chunked: данные передаются частями (чанками), каждый чанк имеет свой размер.
POST /stream HTTP/1.1
Transfer-Encoding: chunked
Если оба отсутствуют, сервер может считать запрос завершённым при закрытии соединения. В Go можно прочитать тело запроса через r.Body и обработать его, не зная заранее длину.
body, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "Bad Request", http.StatusBadRequest)
return
}