Это дает мне какое-либо преимущество, если я устанавливаю этот заголовок при создании обычных html-страниц?
Я вижу, что некоторые фреймворки там устанавливают это свойство заголовка, и мне было интересно, почему … (Наряду с другими заголовками, такими как Content-Type: text/html
)
Загружает ли браузер сайт быстрее или smth? 🙂
ps: они делают это так:
ob_start(); ... stuff here... $content = ob_get_contents(); $length = strlen($content); header('Content-Length: '.$length); echo $content;
Я думаю, что только из-за HTTP Spec говорит, что делать это можно в каждом случае.
Приложения СЛЕДУЕТ использовать это поле, чтобы указать длину передачи тела сообщения, если это не запрещено правилами в разделе 4.4.
Вы также можете посмотреть на Pauls Answer на вопрос о Deaomon .
Я думаю, что это тоже ответит на ваш вопрос.
Также вы должны использовать Content-Length, если хотите, чтобы кто-то загрузил файл с другим заголовком: например
<?php $file = "original.pdf" $size = filesize($file); header('Content-type: application/pdf'); header("Content-length: $size"); header('Content-Disposition: attachment; filename="downloaded.pdf"'); readfile($file); ?>
Это дает мне какое-либо преимущество, если я устанавливаю этот заголовок при создании обычных html-страниц?
Загружает ли браузер сайт быстрее или smth? 🙂
Для динамически генерируемых страниц обычно нет. Content-Length
позволяет клиенту узнать, насколько велик файл. Однако, если Content-Length
не указывается, передача отправляется кусками (со специальным фрагментом, который обозначает конец файла). Первый метод может привести к более быстрой передаче, поскольку устранены накладные расходы на разделение на куски. Тем не менее, это обычно лучше всего зарезервировать для статических файлов, поскольку ресурсы, необходимые для буферизации всего содержимого, чтобы определить длину, могут перевесить любые преимущества, достигнутые при настройке Content-Length
.
Основной мотивацией этого является повторное использование существующего TCP-соединения в HTTP 1.1. Content-Length
может демаркировать, где ответ заканчивается для получателя. Что касается других заголовков, таких как Content-Type
которые задают тип MIME, они предназначены для получателя, чтобы она знала, что делать с результатом, в зависимости от типа содержимого. Например, в Firefox вы можете указать, какое действие для выполнения с разными типами MIME. Если вы можете открыть диалоговое окно сохранения браузера или открыть PDF-файл в программе просмотра с помощью Content-Type
application/pdf
Если речь идет о content-type: text/html
, в основном нужно сказать клиенту, чего ожидать и как обычно обращаться с файлом. В случае ботов он может быть полезен для целей SEO, поскольку он сообщает боту, какой тип файла он смотрит, и который может изменить его анализ или ранжирование.
В случае content-length
это просто позволяет клиенту узнать, как большой файл ожидать и, следовательно, где заканчивается ответ.
Предполагается, что для настройки длины контента желательно использовать, когда вы хотите отправить свой отзыв клиенту, даже если вы по-прежнему хотите выполнять более длительные операции.
См. Этот ответ, в котором объясняется, что вы установите длину содержимого, напишите свой вывод и затем сможете выполнять дополнительные операции в своем скрипте, не заставляя клиента ждать больше.
Лучший способ (который работает для меня) получения размера удаленного файла:
$head = array_change_key_case(get_headers($file, TRUE)); $filesize = $head['content-length'];