如果我在生成普通HTML页面时设置此标题会给我带来任何好处吗?
我看到那里的一些框架会设置这个头属性,我想知道为什么......
(以及其他标题,例如Content-Type: text/html
)
浏览器是否可以更快或更顺畅地加载网站?
ps:他们这样做:
ob_start();
... stuff here...
$content = ob_get_contents();
$length = strlen($content);
header('Content-Length: '.$length);
echo $content;
答案 0 :(得分:17)
我认为只有因为HTTP规范才会在每种情况下都这样做。
应用程序应该使用此字段来指示消息正文的传输长度,除非4.4节中的规则禁止这样做。
您还可以在at Pauls Answer上查看Question of Deaomon。
我认为这也会回答你的问题。
如果您希望有人下载带有其他标题的文件,您也应该使用Content-Length: e.g。
<?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);
?>
答案 1 :(得分:11)
如果我在生成时设置此标头,它是否给我带来任何好处 普通的HTML页面?
浏览器是否可以更快或更顺畅地加载网站?
对于动态生成的页面,通常不会。 Content-Length
让客户端知道文件的大小。但是,如果未指定Content-Length
,则传输将以块的形式发送(带有表示文件末尾的特殊块)。前一种方法可以导致更快的传输,因为消除了分裂成块的开销。但是,这通常最好保留给静态文件,因为缓冲整个内容以确定长度所需的资源可能超过设置Content-Length
所获得的任何优势。
答案 2 :(得分:2)
它背后的主要动机是在HTTP 1.1中重用现有的TCP连接。 Content-Length
可以划分收件人的回复结束位置。
至于其他标题,如指定MIME类型的Content-Type
,它们是针对收件人的,这样她就知道如何处理结果,具体取决于内容的类型
例如,在Firefox中,您可以指定使用不同MIME类型执行的操作。如果您可以弹出浏览器的保存对话框,或者使用Content-Type
application/pdf
答案 3 :(得分:2)
关于content-type: text/html
,主要是告诉客户端期望什么以及通常如何处理文件。在机器人的情况下,它可以用于SEO目的,因为它告诉机器人它正在查看哪种类型的文件可以改变它的解析/排名方式。
在content-length
的情况下,只是让客户知道文件的大小,以及响应结束的位置。
答案 4 :(得分:0)
获取远程文件大小的最佳方式(对我而言):
$head = array_change_key_case(get_headers($file, TRUE));
$filesize = $head['content-length'];
答案 5 :(得分:0)
设置内容长度的一个理想用途是,当您希望将响应发送到客户端时,即使您仍希望在之后执行更耗时的操作。
请参阅this answer,说明您已设置内容长度,编写输出,然后可以在脚本中执行进一步操作,而不会让客户端再等待。
答案 6 :(得分:0)
改变
private var firstDetected = true
for (barcode in barcodes) {
if (barcodes.size > 0 && firstDetected) {
LoggingUtility.writeLog("Analyzer",
"MLKitBarcode Result",
"Barcode is ${barcode.rawValue!!}")
firstDetected = false
}
}
到
$content = ob_get_contents();