IIS6配置启用页面Gzip压缩提速

IIS7是默认开启GZip压缩的,而IIS6则需要手动配置!

一、HTTP压缩概述

HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、Javascript或CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。

本文介绍的HTTP压缩方式,采用的是Windows系统设置的方式,优点是效率较高。

二、HTTP压缩工作原理

Web服务器处理HTTP压缩的工作原理如下:

Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;

如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;

如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;

如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;

如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;

如果请求文件是ASPX等动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

三、IIS 6.0中配置HTTP Gzip压缩的步骤:

1、首先,如果你需要压缩静态文件(HTML),需要在硬盘上建一个目录,并给它“IUSR_机器名”这个用户的写权限。如果压缩动态文件(php,asp,aspx)就不需要了,因为它的页面是每次都动态生成的,压缩完就放弃。

2、在IIS管理器中,右击“网站”->“属性”,不是下面的某个站点,而是整个“网站”,选择“服务”标签,在“HTTP压缩”框中选中“压缩应用程序文件”和“压缩静态文件”,按需要设置“临时目录”和“临时目录的最大限制”;

3、(有反映说此步无效)在Internet信息服务(IIS)管理器,右击“Web服务扩展” -> “增加一个新的Web服务扩展...”,在“新建Web服务扩展”框中输入扩展名“HTTPCompression”,添加“要求的文件”为 C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中“设置扩展状态为允许”;

启用这个扩展,这时候静态内容是可以压缩的,但是对于动态内容,aspx文件却不在压缩范围内,因为默认的可压缩文件并没有这个扩展名,而管理界面中你又找不到可以增加扩展名的地方,这时候只能去修改它的配置文件了。

4、编辑 c:\windows\system32\inetsrv\MetaBase.xml 文件(建议先备份),可以用记事本打开,查找 IIsCompressionScheme,有三个相同名字的段,分别是deflate、gzip、Parameters:

<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/deflate"
<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"
<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/Parameters"(此段不用理会)

第三段Parameters不用管,前两段(deflate、gzip)有基本相同的参数,下面同时修改前两段:

如果需要压缩动态文件:在参数HcScriptFileExtensions下面增加您要压缩的动态文件后缀名,如aspx;

如果需要压缩静态文件:则将HcDoStaticCompression和HcDoOnDemandCompression设置为"TRUE",并在 HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;

最后,参数 HcDynamicCompressionLevel 和 HcOnDemandCompLevel 表示需要的压缩率,数值在0-10,默认为0,这两个属性值一般推荐设置为9,具有最佳性价比(有反映说在windows主机下压缩率对JS文件和图片几乎无影响)。

看下我的配置示例:

<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/deflate"
        HcCompressionDll="C:\WINDOWS\system32\inetsrv\gzip.dll"
        HcCreateFlags="0"
        HcDoDynamicCompression="TRUE"
        HcDoOnDemandCompression="TRUE"
        HcDoStaticCompression="TRUE"
        HcDynamicCompressionLevel="9"
        HcFileExtensions="htm
            html
            txt
            js
            xml
            css
            swf"
        HcOnDemandCompLevel="9"
        HcPriority="1"
        HcScriptFileExtensions="asp
            dll
            exe
            aspx
            php"
    >
</IIsCompressionScheme>
<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"
        HcCompressionDll="C:\WINDOWS\system32\inetsrv\gzip.dll"
        HcCreateFlags="1"
        HcDoDynamicCompression="TRUE"
        HcDoOnDemandCompression="TRUE"
        HcDoStaticCompression="TRUE"
        HcDynamicCompressionLevel="9"
        HcFileExtensions="htm
            html
            txt
            js
            xml
            css
            swf"
        HcOnDemandCompLevel="9"
        HcPriority="1"
        HcScriptFileExtensions="asp
            dll
            exe
            aspx
            php"
    >
</IIsCompressionScheme>

5、编辑完毕后保存MetaBase.xml文件,如果文件无法保存,需先停止IIS服务,打开“开始”->“运行”->“cmd”->“iisreset /stop”,再次尝试保存文件。保存后重启一下IIS服务(运行->CMD->iisreset),就可以体会到压缩后的速度了。

PS.需要注意的是,最好使用记事本来编辑并保存 MetaBase.xml 文件,使用Editplus工具在保存时会提示“这只是一个只读文档”而无法保存!

MetaBase.xml是要求很严格的文件,修改参数或格式出错就会无法使用,修改前最好备份,如果忘了备份,修改又出错,补救方法:metabase.xml所在的目录下还有个history目录,里面存放的是metabase.xml文件在各个时间的备份,复制一份到inetsrv目录即可;另外也可从其它机器上COPY一份过来,但本机原有配置会消失。

下面给个网友提供的一键配置方法:http://pan.baidu.com/s/1gdtlxmV 密码: cmp5