Що таке поле "Довжина вмісту" у заголовку HTTP?


282

Що це означає?

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

Особливо у випадку Content-Type: application/x-www-form-urlencoded.

Відповіді:


239

rfc2616

Поле заголовка сутності об'єкта вказує розмір органу сутності, у десятковій кількості OCTET, надісланого одержувачу, або, у випадку методу HEAD, розмір органу сутності, який був би надісланий. запит GET

Не має значення, який тип контенту.

Розширення по пошті нижче .


14
Поєднайте цю відповідь з відповіддю Тома Кабанського і ви маєте всю необхідну інформацію. У випадку з текстом ви можете порахувати кількість символів, оскільки ASCII становить 8 біт.
hcpl

9
@hcpl: але текст не обов'язково завжди ASCII, також ASCII є 7-бітним, а не 8.
Lie Ryan

2
Замініть ASCII будь-яким кодуванням, яке ви використовуєте, і знайдіть кількість бітів, необхідних для кодування. Для відповіді 7 проти 8 біт; Спочатку це було 7 біт справді, так що ви знову прав. Але сьогодні 8 біт використовуються у більшості (якщо не у всіх) випадках через спосіб організації комп'ютерної пам'яті. редагувати: Перечитуючи свою відповідь, я бачу, куди ви їдете. Я повинен перефразувати свій оригінальний коментар.
hcpl

6
@hcpl: вся причина, чому проблема байтів проти символів є значною, пов’язана з кодуваннями змінної ширини, такими як UTF-8 та UTF-16, де "кількість бітів" не фіксовано.
Стефан Карпінський

2
Ви могли б підробити це число? як POST рядковий парам з величезною довжиною, але встановити довжину вмісту на 1?
Ши-Мін Лі

260

Це кількість байтів даних в тілі запиту чи відповіді. Тіло - це частина, що надходить після порожнього рядка під заголовками.


1
Замість того, щоб "запит чи відповідь", чи не ТІЛЬКИ це "відповідь"? У запиті немає порожнього рядка між заголовком та даними.
ajfbiw.s

чи можу я змінити довжину вмісту заголовка відповіді HTTP, подану у фільтр Java
KItis

2
@ ajfbiw.s Розгляньте запит на повідомлення про http. "Присутність тіла запиту в запиті сигналізується включенням поля заголовка довжини вмісту або передачі-кодування в заголовки повідомлень запиту." З w3.org/Protocols/rfc2616/rfc2616-sec4.html# сек4.3
Рой Гуаню

68

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

Зазвичай Content-Lengthзаголовок використовується для HTTP 1.1, щоб приймаюча сторона знала, коли закінчиться поточна відповідь * , тому з'єднання можна повторно використовувати для іншого запиту .

* ... або запит, у разі методів запиту, які мають тіло, наприклад POST, PUT або PATCH

Крім того, Content-Lengthзаголовок може бути опущений, а згорнутий Transfer-Encodingзаголовок може бути використаний.

Якщо обоє Content-Lengthі Transfer-Encodingзаголовки відсутні, то наприкінці відповіді з'єднання повинно бути закритим.

Наступний ресурс - це посібник, який виявився мені дуже корисним під час вивчення HTTP:

HTTP зроблено дуже просто .


45

Один октет - 8 біт. Довжина вмісту - це кількість октетів, які представляє тіло повідомлення.


37
Октет = байт AKA?
ViniciusPires

77
@ViniciusPires 'байт' зазвичай використовується для опису найменшої адресируемой одиниці пам'яті, яка не обов'язково становить 8 біт у всіх архітектурах. Ось чому "октет" використовується, щоб уникнути будь-якої неясності
PJK

6
@PJK, Ні, не зовсім правильно. OCTETтут є дуже специфічне значення, яке означає <будь-яку 8-бітну послідовність даних>. Див. Визначення на сторінці w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier

28

Звідси :

Поле заголовка сутності об'єкта вказує розмір органу сутності, у десятковій кількості OCTET, надісланого одержувачу, або, у випадку методу HEAD, розмір органу сутності, який був би надісланий. запит GET

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

Прикладом є

   Content-Length: 3495

Програми ВИНАГАЛИ використовувати це поле, щоб вказати довжину передачі тіла повідомлення, якщо це не заборонено правилами в розділі 4.4 .

Будь-яка довжина вмісту, більша або дорівнює нулю, є дійсним значенням. У розділі 4.4 описано, як визначити довжину тіла повідомлення, якщо довжина вмісту не задана.

Зауважте, що значення цього поля суттєво відрізняється від відповідного визначення у MIME, де це необов'язкове поле, яке використовується у змістовому типі "повідомлення / зовнішнє тіло". У HTTP воно повинно бути надіслане щоразу, коли довжина повідомлення може бути визначена перед передачею, якщо це не заборонено правилами в розділі 4.4.

Моє тлумачення полягає в тому, що це означає довжину "на дроті", тобто довжину вмісту, що "закодований"


7
"На дроті" довжина буде змінена залежно від стиснення, але правильно сказати довжину перед тим, як стиснути.
BayssMekanique

Чи відрізнятиметься довжина вмісту на різних машинах типу Mac / Linux? АЛЕ це буде відрізнятися під час використання різних клієнтів, таких як curl / листоноша ...?
Канагавелу Сугумар

1
Якщо припустити, що всі інші залишаються рівними (наприклад, кодування, стиснення тощо), то довжина вмісту повинна бути незалежною від платформи. Це заголовок від сервера, тому, припускаючи, що він не нюхає користувальницький агент і поводиться інакше, клієнт не повинен змінювати жодних змін.
Даніель Реншо

Набір шрифту видає помилку на цьому. Тип 'номер' не призначається типу 'рядок | string [] ', тому прикладом може бути"Content-length": "3495"
A. D'Alfonso

8

З цієї сторінки

На сьогодні найпоширенішим використанням POST є подання даних HTML-форм у сценарії CGI. У цьому випадку заголовок Content-Type: зазвичай є application / x-www-form-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

5

Відповідно до специфікації :

Поле заголовка сутності об'єкта вказує розмір органу сутності, у десятковій кількості OCTET, надісланого одержувачу, або, у випадку методу HEAD, розмір органу сутності, який був би надісланий. запит GET

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

Прикладом є

Content-Length: 3495

Програми ВИНАГАЛИ використовувати це поле, щоб вказати довжину передачі тіла повідомлення, якщо це не заборонено правилами в розділі 4.4.

Будь-яка довжина вмісту, більша або дорівнює нулю, є дійсним значенням. У розділі 4.4 описано, як визначити довжину тіла повідомлення, якщо довжина вмісту не задана.

Зауважте, що значення цього поля суттєво відрізняється від відповідного визначення у MIME, де це необов'язкове поле, яке використовується у змістовому типі "повідомлення / зовнішнє тіло". У HTTP воно повинно бути надіслане щоразу, коли довжина повідомлення може бути визначена перед передачею, якщо це не заборонено правилами в розділі 4.4.


2

Поле заголовка сутності об'єкта вказує розмір органу сутності, у десятковій кількості OCTET, надісланого одержувачу, або, у випадку методу HEAD, розмір органу сутності, який був би надісланий. запит GET

Content-length = "Довжина вмісту" ":" 1 * DIGIT

Прикладом є

Довжина вмісту: 1024

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

У PHP ви б використовували щось подібне.

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

У випадку "Тип вмісту: application / x-www-form-urlencoded" кодовані дані надсилаються до призначеного агенту обробки, щоб ви могли встановити довжину або розмір даних, які збираєтеся розміщувати.


0

Подумайте, чи є у вас заголовки, такі як:

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8

Довжина вмісту - це розмір стисненого корпусу повідомлення в "октетах" (тобто в одиницях з 8 біт, які бувають "байтами" для всіх сучасних комп'ютерів).

Розмір фактичного тіла повідомлення може бути що - то ще, можливо , 150280 байт.

Кількість символів може знову бути різною, можливо, 150231 символом, оскільки деякі символи unicode використовують кілька байтів (примітка UTF-8 - це стандартне кодування).

Отже, різні цифри залежать від того, дбаєте ви про те, скільки даних передається, чи скільки даних зберігається, або скільки символів відображається. Звичайно, немає гарантії, що ці заголовки будуть надані ..

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.