技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> php让服务器不返回chunked

php让服务器不返回chunked

浏览:1966次  出处信息

    chunked是http头部一个很特殊的东西,现代浏览器都支持解析Transfer-Encoding:chunked,chunked能更快的让页面呈现出来,因为它能分段下载,浏览器分段解析,对于大页面,这显然提高了可用性,facebook利用这个特性实现了牛逼的big pipe,那实在是将chunked发挥到淋漓尽致的应用了。

    nginx好像默认就支持chunked,我还没有找到选项关闭,现在我想要获取一个服务器上到数据,该服务器头部默认包含了chunked,这个特性导致用php处理起来显得有些不爽,而且即使他分段提供,我还是需要把它全部读完才开始处理,虽然php可以很方便的http_chunked_decode,但我这人骨子里就是有点喜欢反人类,让服务器不要返回chunked的数据不就可以了吗?后来。。。。。后来还真让我想到了,chunked是http 1.1才有的东西,所以如果告诉服务器,我只能解析1.0,应该就解决问题了,请看烂代码示例:

<?php
$host = 'www.qq.com';
set_time_limit(10);
$st=array_sum(explode(' ',microtime()));
$ip=gethostbyname($host);
$fp=@fsockopen($ip,80,$errno,$errst,5);
if( !$fp ){
	die('挂了.');
}
$header = "GET / HTTP/1.0\r\n";
$header .= "Host: {$host}\r\n";
$header .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1\r\n";
$header .= "Accept: text/html\r\n";
$header .= "Connection: keep-alive\r\n\r\n";
fwrite($fp, $header);
$c=fread($fp,1024);
var_dump($c);
$et=array_sum(explode(' ',microtime()));
fclose($fp);
var_dump($et-$st);
?>

    可以尝试把代码中的1.0改成1.1试试,body部分总是会多出那么几个数字,烦人。这里仅拿QQ做个示例,并非采集之用,给我留言乱猜的同学就此谢过了。

建议继续学习:

  1. PHP 用 curl 读取 HTTP chunked 数据    (阅读:1330)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1