Что такое поле «Content-Length» в заголовке HTTP? - PullRequest
240 голосов
/ 05 мая 2010

Что это значит?

  1. Количество байтов строки закодированного содержимого с кодировкой, указанной в заголовке.
  2. Количество символов строки содержимого.

Особенно в случае «Content-Type: application / x-www-form-urlencoded».

Ответы [ 8 ]

236 голосов
/ 05 мая 2010

Количество байтов данных в теле запроса или ответа. Тело - это та часть, которая идет после пустой строки под заголовками.

200 голосов
/ 05 мая 2010

RFC2616

The Content-Length entity-header field indicates the size of the entity-body,
in decimal number of OCTETs, sent to the recipient or, in the case of the HEAD
method, the size of the entity-body that would have been sent had the request
been a GET. 

Неважно, какой тип контента.

Расширение на сообщение ниже .

51 голосов
/ 05 мая 2010

Заголовок Content-Length - это число, обозначающее точную длину байта тела HTTP. Тело HTTP начинается сразу после первой пустой строки, которая находится после начальной строки и заголовков.

Обычно заголовок Content-Length используется для HTTP 1.1, так что принимающая сторона знает, когда закончился текущий ответ *, поэтому соединение можно повторно использовать для другого запроса .

* ... или запрос в случае методов запроса, имеющих тело, таких как POST, PUT или PATCH

В качестве альтернативы, заголовок Content-Length может быть опущен и может использоваться фрагмент Transfer-Encoding заголовок .

Если оба заголовка Content-Length и Transfer-Encoding отсутствуют, то в конце ответа соединение должно быть закрыто.

42 голосов
/ 21 июля 2011

Один октет составляет 8 бит. Длина содержимого - это количество октетов, которое представляет тело сообщения.

24 голосов
/ 05 мая 2010

Отсюда :

Поле заголовка объекта Content-Length указывает размер сущности-тела, в десятичном числе октетов, отправленных получатель или, в случае Метод HEAD, размер сущность, которая была бы отправлена если бы запрос был ПОЛУЧЕН.

   Content-Length    = "Content-Length" ":" 1*DIGIT

Примером является

   Content-Length: 3495

Приложения ДОЛЖНЫ использовать это поле для указать длину передачи тело сообщения, если это не запрещено правилами в разделе 4,4 .

Любой контент-длина больше или равно нулю является действительным значением. Раздел 4.4 описывает, как определить длина тела сообщения, если Длина содержимого не указана.

Обратите внимание, что значение этого поля значительно отличается от соответствующее определение в MIME, где используется необязательное поле внутри "сообщения / внешнего тела" Тип содержимого. В HTTP это ДОЛЖНО быть отправляется всякий раз, когда длина сообщения может определяться до того, как переведено, если это не запрещено по правилам раздела 4.4.

Моя интерпретация заключается в том, что это означает длину "на проводе", то есть длину * кодированного "содержимого

7 голосов
/ 05 мая 2010

С этой страницы

Наиболее распространенное использование POST, безусловно, это представить данные формы HTML в CGI скрипты. В этом случае Content-Type: заголовок обычно применение / х-WWW-форм-urlencoded, и Content-Length: заголовок дает длина URL-кодированной формы данные (вот заметка о кодировке URL). CGI-скрипт получает сообщение тело через STDIN и декодирует его. Вот типичная форма представления, используя POST:

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
4 голосов
/ 05 мая 2010

Согласно спецификации :

Поле заголовка объекта Content-Length указывает размер тела объекта, в десятичном числе OCTET, отправленного получателю, или, в случае метода HEAD, размер тела объекта, который будет иметь был отправлен, если запрос был получен.

Content-Length    = "Content-Length" ":" 1*DIGIT

Примером является

Content-Length: 3495

Приложения ДОЛЖНЫ использовать это поле для указания длины передачи тела сообщения, если это не запрещено правилами в разделе 4.4.

Любое значение Content-Length больше или равно нулю, является допустимым значением. В разделе 4.4 описано, как определить длину тела сообщения, если не указана длина содержимого.

Обратите внимание, что значение этого поля значительно отличается от соответствующего определения в MIME, где оно является необязательным полем, используемым в типе содержимого "message / external-body". В HTTP его СЛЕДУЕТ отправлять всякий раз, когда длина сообщения может быть определена до его передачи, если это не запрещено правилами в разделе 4.4.

2 голосов
/ 05 мая 2010

Поле заголовка объекта Content-Length указывает размер тела объекта в десятичном числе OCTET, отправленного получателю, или, в случае метода HEAD, размер тела объекта, который будет иметь был отправлен, если запрос был получен.

Content-Length = "Content-Length" ":" 1 * DIGIT

Примером является

Контент-длина: 1024

Приложения ДОЛЖНЫ использовать это поле для указания длины передачи тела сообщения.

В PHP вы бы использовали что-то вроде этого.

header("Content-Length: ".filesize($filename));

В случае «Content-Type: application / x-www-form-urlencoded» закодированные данные отправляются назначенному обработчику, чтобы вы могли установить длину или размер данных, которые вы собираетесь публиковать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...