好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

HTTP chunked+gzip及浏览器兼容测试 转

HTTP chunked+gzip及浏览器兼容测试 转

http://blog.sina.com.cn/s/blog_622a99700100hskr.html

HTTP chunked+gzip及浏览器兼容测试   (2010-04-26 14:41:51)

转载

标签:  

http  

chunked  

gzip  

浏览器  

ie  

chrome  

简述:

QQ空间提出一个需求,要求 qzhttp 支持 chunked+gzip 。每个 chunk 是一个独立的 gzip 压缩包,并提到雅虎是这么实现的。

分析结论:

1. 雅虎的 chunked+gzip 的方式,每个 chunk 并不是一个独立的 gzip 压缩包。

2. 如果采用 chunked+gzip 方式,并且每个 chunk 都是一个 gzip 压缩包的方式,浏览器不支持 ( 用 ie 和 chrome 测试 ) 。

一 .  首先对于雅虎搜索 chunked+gzip 的一个抓包分析。

第一段 chunk, 前 2 个字节是标准的 gzip 包头 0x1f8b

第二段 chunk, 前 2 个字节则不是标准的 gzip 包头。

如果将 yahoo 的 http 回包中头字段和 chunk 控制字段去掉保存起来,会得到一个标准的 gzip 包,可以用 7-zip 打开。

所以 yahoo 搜索的 chunked+gzip 模式中的每个 chunk 并不是一个可独立解压的 gzip 包。

二 .  关于对浏览器对 chunked+gzip 的支持测试。

为了快速测试,用 php 脚本实现了一个简单的 web server 。(见下)

1.  每个 chunk 单独压缩。

用 cat 参数启动 server  ( server 的 php 脚本见下)

./chunked_gzip.php cat


从图中可以看到分了三个 chunk ,每个 chunk 都是一个标准的 gzip 压缩包。

对应 php 中的代码:


IE 对此的反应是只显示的第一个 chunk.


Chrome 对此的反应是正确显示第一个 chunk ,其它的就乱来了。

2.   如果将整个包体压缩成一个 gzip 包,然后分成多个 chunk 。

用 dog 参数启动 server ( server php 脚本见附件)

  ./trucked_gzip.php dog

从图中可以看到所有的 chunk 合在一起是一个压缩包, gzip 标准头只出现了一次 0x1f8b 。

对应 php server 里面的代码是:

IE 对此的反应是能正确显示。


Chrome 对此的反应同样的正确的。

   三.      在 wikipedia 上有对于 chunked+gzip 是不是分段压缩的明确说明

原文: HTTP servers sometimes use compression (gzip or deflate) to allow reducing time spent for transmission. Chunked transfer encoding can be used to delimit parts of the   compressed   object.   In this case, it is  worth noting  that the chunks are   not   individually compressed. Instead, the complete payload is compressed and the output of the compression process is chunked using the scheme described in this article.

译: http server  有时候用压缩来减少传输时间。 Chunked 方式可以将 压缩后 的数据分成好几块。在这种情况下, 值得注意 的是这些 chunks 并 不是 分别(独立)被压缩 的,相反,整个压缩处理后的输出再用前面讲到的 chunked 方式传输。

http://en.wikipedia.org/wiki/Chunked_transfer_encoding

 

php测试脚本代码:




 

查看更多关于HTTP chunked+gzip及浏览器兼容测试 转的详细内容...

  阅读:68次