Content-Length
Заголовок Content-Length указывает размер отправленного получателю тела объекта в байтах.
Тип заголовка | Заголовок сущности |
---|---|
Можно не передавать | да |
Синтаксис
Content-Length:
Директивы
Спецификация
Specification |
---|
HTTP Semantics # field.content-length |
Браузерная совместимость
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
Content-Length
Заголовок Content-Length указывает размер тела сообщения в байтах, отправляемого получателю.
Header type | Н14153Н, П25387П, К36246К |
---|---|
Запрещенное имя заголовка | yes |
Заголовок ответа CORS-safelisted | yes |
Syntax
Content-Length:
Directives
Длина в десятичном числе октетов.
Specifications
Specification |
---|
HTTP Семантика # field.content-length |
Правильная выдача заголовка Content-Length
Однажды, скачивая один из своих сайтов с помощью WGet, с удивлением обнаружил, что после каждой страницы программа останавливается и ждет несколько секунд. Да пользователи иногда тоже жаловались на то, что загрузка сайта очень долго не заканчивается. Стал разбираться, в чем дело, и вот что удалось выяснить.
ob_start('ob_gzhandler');
ob_implicit_flush(0); // отключаем неявную отправку буфера
/* Здесь идет код скрипта, в нем не должно быть ob_flush, так как потом нельзя будет выдавать заголовки */
if (!header_sent()) header('Content-Length: '.ob_get_length()); // если заголовки еще можно отправить, выдаем загловок Content-Length, иначе придется завершать передачу по закрытию
ob_end_flush();
exit(0);
2 комментария:
Спасибо за полезную информацию, но еще хотелось бы увидеть способ с chunked transfer
Вообще, обычно chunked transfer применяется тогда, когда длина выдаваемой страницы целиком заранее не известна. В этом случае Content-Length лучше не выдавать вообще. А длина каждого отдельного chunk передается перед началом его самого, там все то же самое, только нет слов Content-Lenght и саму длину chunk нужно выдавать не через header, а обычным echo и переводить в hex.
То есть получаем примерно такое:
ob_start();
header(‘Transfer-Encoding: chunked’);
while (!$finish) // что-то делаем с выдачей с помощью echo
echo sprintf(«%X\r\n»,ob_get_length()); // выдаем длину текущего chunk в hex
ob_flush(); // выдаем сам chunk
>
echo «0\r\n»; // пустой chunk означает завершение передачи
- © 2018—2023, 4X_Pro
- Правила
- Обо мне
- Все проекты
- Достижения
Дизайн Replica от Hiitea, сайт работает на Intellect Board Pro 3.05 RC1.
Материалы сайта могут использоваться свободно на условиях лицензии CC BY-NC
Задать вопрос
Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.
- Цитировать
- Копировать
- Поделиться
- Отправить ВК
Как рассчитывается значение заголовка Content-Length?
Я никогда об этом не задумывался, но сегодня вдруг задался вопросом, а что именно обозначает Content-Length? Исключительно размер тела запроса или оно показывает размер всего запроса, т. е. служебные заголовки + тело?
P. S. В документации написано, что это размер тела запроса, но не сказано, относятся ли служебные заголовки к телу!
- Вопрос задан более двух лет назад
- 1542 просмотра
2 комментария
Простой 2 комментария
Ярослав Иванов @space2pacman
Заголовки относятся к заголовкам. Длинна контента это только тело.
Content-Length бывает 0, при этом очевидно что если бы в него входили заголовки, то такого бы быть не могло.
Решения вопроса 1
Какой вопрос — такой и ответ
Content-length показывает размер Body.
Т.е. он вполне может быть нулевого размера даже при наличии кучи заголовков и статуса.
Для таких простых вопросов всегда есть гугл и докментация
https://developer.mozilla.org/en-US/docs/Web/HTTP/.
Ответ зашит в самом названии — «Content length»
В документации написано, что это размер тела запроса, но не сказано, относятся ли служебные заголовки к телу!