« January 2006 | Main | August 2006 »
February 25, 2006
Server Push blocked by Compress - 压缩模式不能实现Server Push
Server Push并不是什么新技术,而是一种老技术。早年Netscape就提出了Server Push的技术,通过HTTP 内容类型 multipart/x-mixed-replace 来标识。
但由于Netscape被迫退出市场后,IE一直没有支持这样的特性,所以想基于真正的Server Push 技术开发web 即时通信软件的梦想一直不能获得完美实现。
目前一般的Server Push实现大多是由一个长效执行的cgi程序,将变更的信息发送到客户端浏览器,此时需要此cgi程序及web server支持unbuffer,即能在任意时刻在与客户端建立的连接这个流中传递信息,并不进行缓冲。这样客户端可以即时收到信息。
过去在DMS(Damail System)中实现的无刷新进度条就是使用类似的技术。
最近重新收拾了一下过去的实现,发现居然不能用了!什么原因?
经过检查和对比,才忽然发现,原来自己的web server 打开了内容压缩(gzip,deflate)的功能,难怪怎么都无法即时获得server端的输出。
由于deflate/gzip输出必须事先获得全部的输出信息,因此web server强制性的等待cgi程序执行完毕之后,才将cgi的输出结果进行压缩,并发送到客户端。
因此客户端将一直处于“阻塞”状态,得不到任何数据。
以后得小心这个问题,或者利用apache的deflate模块里提供的功能,对于特定的后缀才进行压缩,对于cgi程序不压缩。否则Server Push就被Blocked 了 :-)
相关的一些Link:
http://home.netscape.com/assist/net_sites/pushpull.html
Posted by hzqbbc at 06:37 PM | Comments (3)