Длина содержимого и другие заголовки HTTP? - PullRequest
18 голосов
/ 16 марта 2012

Дает ли я какое-либо преимущество, если я устанавливаю этот заголовок при генерации обычных страниц HTML?

Я вижу, что некоторые фреймворки будут устанавливать это свойство заголовка, и мне было интересно, почему ...заголовки, например Content-Type: text/html)

Браузер загружает сайт быстрее или плавнее?

ps: они делают это так:

ob_start();

... stuff here...

$content = ob_get_contents();
$length = strlen($content);

header('Content-Length: '.$length);

echo $content;

Ответы [ 6 ]

17 голосов
/ 16 марта 2012

Я думаю, что только из-за того, что в спецификации HTTP сказано делать это в каждом возможном случае.

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

Вы также можете посмотреть на ответ Павла на Вопрос о Деомоне .

Я думаю, что это ответит и вам.

Также вам следует использовать 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);
?>
11 голосов
/ 16 марта 2012

Дает ли я какое-либо преимущество, если я устанавливаю этот заголовок при создании обычных HTML-страниц?

Загружает ли браузер сайт быстрее или плавнее?

Для динамически генерируемых страниц, как правило, нет. Content-Length сообщает клиенту размер файла.Однако, если Content-Length не указано, передача отправляется кусками (со специальным блоком, который обозначает конец файла).Первый способ может привести к более быстрой передаче, поскольку устраняются накладные расходы на разбиение на фрагменты.Однако обычно это лучше всего зарезервировать для статических файлов, поскольку ресурсы, необходимые для буферизации всего содержимого, чтобы определить длину, могут перевесить любые преимущества, полученные при установке Content-Length.

.
2 голосов
/ 16 марта 2012

Что касается content-type: text/html, это в основном говорит клиенту, чего ожидать и, как правило, как обращаться с файлом. В случае с ботами это может быть полезно для целей SEO, так как сообщает боту, какой тип файла он просматривает, и который может изменить его анализ / ранжирование.

В случае content-length это просто позволяет клиенту узнать, какого размера файл ожидать и, следовательно, где заканчивается ответ.

2 голосов
/ 16 марта 2012

Основной мотивацией для этого является повторное использование существующего TCP-соединения в HTTP 1.1. Content-Length может определить, где заканчивается ответ для получателя. Что касается других заголовков, таких как Content-Type, в которых указан MIME-тип, они предназначены для получателя, чтобы она знала, что делать с результатом, в зависимости от типа содержимого. Например, в Firefox вы можете указать, какое действие выполнять с различными MIME-типами. Если вы можете открыть диалоговое окно сохранения браузера или открыть PDF-файл в программе просмотра с Content-Type из application/pdf

0 голосов
/ 13 мая 2015

Один из предположительно хороших способов использования длины контента - это когда вам нравится отправлять свой ответ клиенту, даже если вам все еще нравится выполнять более длительные операции.

См. этот ответ, который объясняет, что вы устанавливаете длину содержимого, записываете свои выходные данные, а затем можете выполнять дальнейшие операции в своем сценарии, не заставляя клиента больше ждать.

0 голосов
/ 17 марта 2014

Лучший способ (который работает для меня) получения размера удаленного файла:

$head = array_change_key_case(get_headers($file, TRUE));
$filesize = $head['content-length'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...