内容长度和其他HTTP标头?

ell*_*uty 18 php http-headers

如果我在生成普通HTML页面时设置此标题,它是否会给我带来任何好处?

我看到那里的一些框架会设置这个头属性,我想知道为什么......(和其他标题一样Content-Type: text/html)

浏览器是否加载网站更快或更顺畅?

ps:他们这样做:

ob_start();

... stuff here...

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

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

echo $content;
Run Code Online (Sandbox Code Playgroud)

Ney*_*sor 17

我认为只有因为HTTP规范才能在每种情况下都这样做.

应用程序应该使用此字段来指示消息正文的传输长度,除非4.4节中的规则禁止这样做.

你也可以看看关于Deaomon问题的Pauls答案.

我想这也会回答你的问题.

如果您希望有人下载带有另一个标题的文件,您也应该使用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);
?>
Run Code Online (Sandbox Code Playgroud)


web*_*ave 11

如果我在生成普通的html页面时设置此标题,它会给我带来什么好处吗?

浏览器是否加载网站更快或更顺畅?

对于动态生成的页面,通常不会. Content-Length让客户端知道文件有多大.但是,如果Content-Length未指定,则传输将以块的形式发送(带有表示文件末尾的特殊块).前一种方法可以导致更快的传输,因为消除了分裂成块的开销.但是,这通常最好保留给静态文件,因为缓冲整个内容以确定长度所需的资源可能超过设置所获得的任何优势Content-Length.

  • 如果内容长度小于OS/Web服务器的发送缓冲区大小,则Web服务器将自动包含"Content-Length".但是,如果长度超过缓冲区,您将看到不会发送内容长度,而是使用`Transfer-Encoding:chunked`. (3认同)
  • 默认情况下,Apache为其[SendBufferSize](http://httpd.apache.org/docs/2.0/mod/mpm_common.html#sendbuffersize)使用OS缓冲区默认值.要确定OS缓冲区大小,您需要搜索`tcp发送缓冲区大小<your_os>`,因为它对于每个操作系统都是不同的.对于Windows XP-7,它是8192字节. (2认同)
  • 你是对的,在chrome中它的8K :)但我不认为使用内容长度的东西用于html文件是可靠的,因为它们可能被gzip压缩,所以strlen()大小不是真的尺寸 (2认同)