Как в HTTP определяется длина запроса

«Как в HTTP определяется длина запроса» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Длина 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
}