Php 内容长度和其他HTTP头?

Php 内容长度和其他HTTP头?,php,http-headers,Php,Http Headers,如果在生成普通HTML页面时设置此标题,是否会给我带来任何好处 我看到一些框架会设置这个header属性,我想知道为什么。。。 (以及其他标题,如内容类型:text/html) 浏览器加载站点是否更快或更流畅 附言:他们这样做: ob_start(); ... stuff here... $content = ob_get_contents(); $length = strlen($content); header('Content-Length: '.$length); echo $c

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

我看到一些框架会设置这个header属性,我想知道为什么。。。 (以及其他标题,如
内容类型:text/html

浏览器加载站点是否更快或更流畅

附言:他们这样做:

ob_start();

... stuff here...

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

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

echo $content;

它背后的主要动机是重新使用HTTP 1.1中现有的TCP连接<代码>内容长度可以为收件人划分响应的结束位置。 至于其他标题,如指定MIME类型的
Content-Type
,它们是针对收件人的,以便收件人知道根据内容的类型对结果做什么 例如,在Firefox中,您可以指定使用不同MIME类型执行的操作。如果您可以弹出浏览器的“保存”对话框,或在查看器中打开一个PDF,其内容类型为
application/PDF

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

浏览器加载站点是否更快或更流畅


用于动态生成的页面,通常不是。
内容长度
让客户端知道文件有多大。但是,如果未指定
内容长度
,则传输将分块发送(带有表示文件结束的特殊块)。前一种方法可以提高传输速度,因为消除了分割成块的开销。但是,这通常最好是为静态文件保留,因为缓冲整个内容以确定长度所需的资源可能会超过设置
内容长度所获得的任何优势。我认为这只是因为HTTP规范说,在任何情况下都可以这样做

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

你也可以在网上看看

我想这也能回答你的问题

此外,如果您希望有人下载具有其他标题的文件,则应使用Content Length: e、 g


内容类型:text/html
而言,它主要是告诉客户需要什么以及通常如何处理文件。在机器人程序的情况下,它可以用于SEO目的,因为它告诉机器人程序它正在查看的文件类型可以改变它的解析/排序方式

对于
内容长度
,只需让客户端知道文件的预期大小以及响应的结束位置。

获取远程文件大小的最佳方法(对我来说是这样的):

$head = array_change_key_case(get_headers($file, TRUE));
$filesize = $head['content-length'];

设置内容长度的一个很好的用途是,当您希望将响应发送到客户端时,即使之后仍然希望执行更耗时的操作

请参阅下面的说明,您可以设置内容长度,编写输出,然后在脚本中执行进一步的操作,而无需让客户端再等待。

更改

$content = ob_get_contents();


你的意思是像在同一个请求中请求两个页面一样?不,它们是在同一个TCP连接的上下文中发送的。这个概念被称为HTTP persistent connection.hmmm,但从我在维基百科中看到的HTTP 1.1浏览器连接默认情况下是持久的,所以这是真的需要吗?这部分是指HTTP 1.1中冗余的保持活动头。我在Chrome的开发者工具中检查了头,我发现即使我没有在PHP中设置内容长度头,也会设置内容长度头。如果内容长度小于OS/web服务器的发送缓冲区大小,web服务器将自动包含
内容长度
。但是,如果长度超过缓冲区,您将看到内容长度将不会被发送,而是将使用
传输编码:chunked
。您知道如何确定缓冲区大小吗?默认情况下,Apache使用OS缓冲区默认值作为其缓冲区。要确定操作系统缓冲区大小,您需要搜索
tcp发送缓冲区大小
,因为每个操作系统的缓冲区大小不同。对于Windows XP-7,它是8192字节。你是对的,在chrome中是8K:)但是我认为对html文件使用内容长度是不可靠的,因为它们可能是由gzip压缩的,所以strlen()大小不是真正的大小。回答你下面没有列出的问题?为什么?请注意,问题不是问如何改进代码。它使用它作为他们在一些框架中看到的代码示例。他们的问题是,“如果我在生成普通HTML页面时设置此标题,是否会给我带来任何好处?…浏览器是否会更快或更平滑地加载网站?”您对代码的反馈并没有回答这个问题。这并没有提供问题的答案。一旦你有足够的钱,你将能够;相反-
$content = ob_get_contents();
$content = ob_get_clean();