A-A+

谈网站压缩

2002年12月03日 学习随笔 暂无评论 阅读 1 次

IT部门都想减少其网站的运行成本,毫无疑问会考虑减少带宽使用量。利用目前的网站压缩技术能达到90%的压缩比率,平均带宽节省2——3倍。然而执行中会受到浏览器和服务器里现有bugs的影响。本文将介绍如何成功地压缩HTML的流量,从而节省每月带宽的支出。

一、网站压缩的原理

IE4.0以上和Netscape 3.0以上的版本都有对WEB服务器传送来的压缩文件解压缩的功能,这个解压缩的特性直接建立在浏览器中了,不需要插件,并且默认就是激活的。IE向服务器发送“Accept-Encoding: gzip, deflate”标头,Netscape发送“Accept-Encoding: deflate”标头,以此表明它们能解压缩的压缩类型。

“deflate”是表明已压缩页面的一种数据格式,而非一种压缩技术。不同的压缩技术有不同的压缩量,但一般都以deflate格式输出。Gzip是传输时打包压缩页面的一种格式,该格式首先是传输10字节的标头,接着是已压缩的页面,最后是2字节的校验和、2字节指明原始文件的大小(见图1)。任何Gzip文件的前两个字节都是一样的,第三个字节是指明压缩的格式(0x08表示 deflate格式)。

clip_image001

图1:Gzip格式

当WEB服务器处理带有“Accept-Encoding:”标头的请求时,它要选择是送一个已压缩的页面或是一个标准的未压缩的页面。如果决定是回送已压缩的页面,它同时回送“Content-Encoded:”标头,说明编码的类型,如“Content-Encoded: gzip”(见图2)。浏览器将根据该标头决定在向浏览者呈现页面前是否要解压缩。

clip_image002

图2:被压缩的HTTP请求/响应

二、WEB服务器压缩工作量

服务器在压缩页面时有两个截然不同的情况:针对静态页面,页面可以提前压缩,并服务于多个请求。因为压缩每一个页面花费的时间大略是100 – 1000毫秒(取决于页文件的大小和压缩的质量),所以提前将静态页面压缩好以服务于多个请求,既节省CPU资源也能快速响应。对于动态页面如ASP、CFP等要难一些,不得不在对每一个请求响应时才压缩,因为每一个请求的结果完全不一样。

三、IIS5.0 的压缩功能

I IS5.0可以压缩动态和静态两种页面,默认的压缩选项是关闭的,为了打开它按以下步骤操作:

1、 打开IIS Manager

2、 找到Computer Node

3、 右击,选择Properties

4、 点击Master Properties的Edit按扭

5、 选择Service

6、 在其底部有一个HTTP Compression部分

7、 激活“Compress Application Files”,以使得ASP或CFP被压缩

8、 激活“Compress Static Files”,以压缩静态页面

clip_image003

图3:建立IIS压缩功能

IIS5.0执行其压缩功能是通过ISAPI过滤器(安装在C:WINNTSystem32inetsrvcompfilt.dll)来完成,也意味着本机上所有的网站都要压缩。如果图3中的“HTTP Compression”是灰颜色的,可能是系统缺少压缩过滤器。

默认状态下,IIS5.0压缩功能只压缩扩展名为“htm”、“html”和“txt”的文件,因为这些文件的压缩比最大。当然,也可以让IIS压缩其他文件:

1、 打开命令提示(Command Prompt)窗

2、 改变当前目录到InetPubAdminScripts文件夹

3、 输入系列命令:

CSCRIPT.EXE ADSUTIL.VBS SET

W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"

4、 执行IISRESET.EXE

5、 关闭命令提示窗

当配置了静态压缩功能后,IIS过滤器就将所有已压缩的文件放入一个临时的地方,默认在:C:WINNTIIS Temporary Compressed Files,这些文件被多个请求重复使用,直到原始文件有改变。然而默认的临时存储空间大小是不加限制的,建议还是设置一个合理的值。

四、网站压缩目前存在的问题

IE5.5和IE6.0都有一个有关解压缩的bug影响用户浏览压缩页面,这个bug的有关资料查阅 Microsoft knowledge Base articles的Q312496(针对 IE 6.0)和 Q313712(针对IE 5.5)。因为IE不会将服务器返回的文件在送到如Adobe Photoshop这样的插件之前解压缩,那么Adobe Photoshop在接收到一个压缩文件时,有时会使得IE死掉。针对该问题,微软提供了一个客户端补丁,请参考微软产品支持与参考Q313712。

即使微软已经认识到这个问题并发布了一个补丁,但是成效不大,许许多多的人还是在运行有问题的浏览器,而不愿意安装补丁,最好是微软能发布一个服务器端的补丁。如果服务器以不同方式送回HTTP响应标头,浏览器插件就不会收到已压缩的数据,浏览器就能成功解压缩并呈现页面了。但目前还没有IIS5.0压缩过滤器的补丁。

但是有一些公司发布了其他的压缩过滤器,这些压缩过滤器有更多的特点并能避开IE的问题。Xcache( http://www.xcache.com)就是其中之一,它能应用到单个或多个网站,并可以选择要压缩那一个文件和何种文件类型。

(编辑:一怒拔剑)

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录