IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

php让服务器不返回chunked

Zend Studio 2011-10-14 13:38:28 累计浏览 3,088 次
本机暂存

    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. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,164)
  2. 使用gettext来支持PHP的多语言 (累计阅读 39,268)
  3. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,895)
  4. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  5. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  6. 浅析http协议、cookies和session机制、浏览器缓存 (累计阅读 17,446)
  7. 记录一个软中断问题 (累计阅读 16,954)
  8. 解析nginx负载均衡 (累计阅读 16,622)
  9. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  10. libcurl的使用总结(二) (累计阅读 15,083)