高性能web网站优化原则4——利用gzip压缩组件

从HTTP/1.1开始,web客户端在http请求头Accept-Encoding里支持压缩技术
Accept-Encoding:gzip, deflate, sdch
如果服务器看到这个请求,就可以用客户端给定列表里面的压缩方法压缩响应数据,web服务器使用响应头Content-Encoding来通知客户端Content-Encoding: gzip。Gzip是目前最流行和最有效的压缩方法,由GNU开发然后标准化为RFC 1952。其他压缩方式有deflate等,但主流浏览器大部分都支持gzip,但有的不支持deflate,所以gzip是压缩方法的首选。
问题来了,我们改压缩哪些组件呢?
服务器会基于文件类型来选择gzip的压缩对象,大部分的网站压缩html文档,css,js文件,或者xml、json格式的返回结果。图片和pdf格式的文件一般不会压缩,因为它们已经被压缩了。尝试压缩这些文件不仅浪费cpu资源,反而有可能会增加压缩文件的大小。
gzip是有代价的,在服务器端进行压缩要付出额外的cpu资源,同样的在客户端解压也需要消耗cpu资源。权衡利弊要综合考虑响应的大小,带宽以及客户端和服务器之间的距离等因素。一般来说gzip可以降低响应大小的约70%左右,还是挺可观的。

apache服务器端配置
可以参考http://jingyan.baidu.com/article/359911f555f77857fe030603.html和http://www.jb51.net/article/38350.htm里面的描述,Apache 2.x 以上的服务器一般使用mod_deflate

代理缓存问题
当浏览器通过代理向服务器发送请求时,情况稍有复杂。假如第一次浏览器请求的时候不支持gzip,由于是第一次通过代理请求,cache是空的,代理转发请求到服务器,服务器做出无压缩的响应,那么这个无压缩的响应就会被代理缓存起来。那如果浏览器同样的url再次发送请求,代理会返回cache中的无压缩响应。反过来,如果第一次请求是支持压缩的,第二次请求是不支持压缩的,那么代理只返回压缩版本的响应而不管请求是压缩的还是无压缩的。
解决方法是服务器返回的时候加一个响应头:Vary: Accept-Encoding。服务器告诉代理要基于客户端的请求来改变缓存的响应。这就会导致代理缓存多个版本的响应,像前面的例子,代理会缓存无压缩的响应和压缩的响应,随着客户端Accept-Encoding的不同而给出不同的响应。
  作为信息时代象征的Internet的广泛使用是毋庸置疑的,作为Internet的终极用户,您可能经常有这种抱怨,我的机器够快的,但使用Internet时总觉得慢,作为ISP又抱怨用户不愿意掏钱买更好的线路,作为ICP又觉得没有太好的软件可以让数据的流量变小,这种受带宽限制的Internet着实让很多人伤心,何不制作一个数据压缩程序,将数据压缩一下,让他变得快些呢,Web Server和IE提供了部分这样的功能,也就是将网页的内容进行压缩,但这仅仅是部分功能。   对于象地理信息系统,图书查询系统,ERP系统等的,Internet要传输的数据量相当大,而象图形数据、XML数据、文本数据其压缩率是相当高的,甚至可以压缩到百分之几,正是由于这个要求,我制作了这么两个软件:一是传输流/文件压缩软件,另一个是基于HTTP的压缩传输软件,这两个软件花费了我很多心血(尽管里面还有一些BUG),但我准备把他作为免费软件,来庆贺我的生日,如果你想使用或想得到源码请发邮件给我。   第一个软件,传输流/文件压缩利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作   第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和JScript无缝融合   更详细信息请看使用文档Help.doc   例子文件包含这么几个: readme.doc 本文件 help.doc 帮助文档 GZCore.dll gzip,deflate压缩/解压程序,使用前必须注册 GZUtil.dll GZCore.dll的缓冲区处理封装,用于Web的流处理,使用前必须注册 GZip4Web.dll 基于Web压缩文件/流的传送,使用前必须注册 Test.zip 第一个产品的例子, C++代码工程 Temp.asp 第一个产品的例子, 直接用压缩程序发送GZip流 SvrRecv.asp 第二个产品的例子,用于服务端处理接受的压缩流 SvrSend.asp 第二个产品的例子,用于服务端处理发送的压缩流 default.asp 第二个产品的例子,用于客户端处理处理接受文件,GZip流   如果您有好的建议或BUG汇报,请邮件给我,我先表示感谢。   重要说明,此软件不允许使用于商业用途,否则会受到牵连。   另注,由于本软件使用带来的任何损失,软件制作者概不负责。    Ashley Wang ashleywang@21cn.com 2001.12.24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值