在IIS上启用Gzip压缩(HTTP压缩)

一.摘要

本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度.

 

二.前言.

本文的知识点是从互联网收集整理, 主要来源于中文wiki.  使用YSlow检测网站启用了哪些优化时, Gzip是十分关键的一项. 启动Gip压缩将立竿见影的减少页面的网络传输大小.

 

三.HTTP压缩概述

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

 

四.HTTP压缩工作原理

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

1.Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;
在用户浏览器发送请求的HTTP头中,  带有"Accept-Encoding: gzip, deflate"参数则表明支持gzip和deflate两种压缩算法.

2.如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
静态文件和动态文件后缀启动要所都需要在MetaBase.xml中设置.
静态文件需要设置: HcFileExtensions Metabase Property (单击跳转到MSDN说明)
动态文件需要设置: HcScriptFileExtensions Metabase Property (单击跳转到MSDN说明)

3.如果请求文件是HTML、CSS等静态文件并且文件后缀启用了压缩,则Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;

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

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

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

 

五. 在IIS中启用HTTP压缩

IIS默认并不支持HTTP压缩,需要进行简单的配置

1.打开Internet信息服务(IIS)管理器,右击"网站"->"属性",选择"服务"。在"HTTP压缩"框中选中"压缩应用程序文件"和"压缩静态文件",按需要设置"临时目录"和"临时目录的最大限制";
image

2.提醒: 经试验此步骤在本人机器上没有作用, 可以忽略.
在Internet信息服务(IIS)管理器,右击"Web服务扩展"->"增加一个新的Web服务扩展...",在"新建Web服务扩展"框中输入扩展名"HTTP Compression",添加"要求的文件"为C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中"设置扩展状态为允许";
image

3.使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),
找到Location ="/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩,
找到Location ="/LM/W3SVC/Filters/Compression/deflate"用于设置deflate压缩.
上面两个节点紧挨着.并且设置的属性相同.

如果需要压缩动态文件,则将HcDoDynamicCompression设置为"TRUE",并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为"TRUE",并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数值在0-10, 默认为0.
HcDynamicCompressionLevel属性说明:HcDynamicCompressionLevel Metabase Property
HcOnDemandCompLevel 属性说明:HcOnDemandCompLevel Metabase Property

说明: 这两个属性值一般推荐设置为9, 具有最佳性价比.但是在我的window server 2003上, 压缩率无论如何设置, jQuery和jQuery UI两个文件(58k/188k)压缩后的大小一直相同.(20k/45k). 

下面是我的实例:

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

 

4.编辑完毕后保存MetaBase.xml文件;如果文件无法保存,则可能IIS正在使用该文件。打开"开始"->"管理工具"->"服务",停止"IIS Admin Service"后,即可保存;

 

5.最后,重新启动IIS。可以到HTTP压缩测试网站验证结果.以jQuery为例, 核心类库和UI类库原始大小分别是57k和188k,压缩后分别是20k和45k:
image
我们通过Http头中的: Content-Encoding:gzip 属性判断返回后的数据已经启用了gzip压缩:
image 
使用YSlow检测, 当只启动静态文件压缩时, Gzip压缩评级为B:
image 
当同时启动了动态文件压缩时, Gzip压缩评级为A:
image

六.要点总结

1. 在修改MetaBase.xml文件时, 要停止"IIS Admin Service"服务. 否则无法保存.

2.静态压缩和动态压缩率最好设置为9. 

3.上文的步骤2, 即使不添加Web服务扩展效果也是相同的.

4.压缩率设置对js文件不起作用, 压缩后大小总是相同的.

5.图片文件即使启用了gzip压缩大小也没有变化.

 

七. 总结

本文总结了如何在IIS中启用Gzip压缩.  在半年前的项目中我为网站启用了Gzip, 今天整理此文主要为了整理自己的知识以便以后忘记时复习. 另外经查看ChinaCache公司提供的CDN也都启用了Gzip压缩.

作者:张子秋
出处:http://www.cnblogs.com/zhangziqiu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2009-05-17 18:43 ziqiu.zhang 阅读(11228) 评论(29) 编辑 收藏

 回复 引用 查看   
#1楼 2009-05-17 19:24 毛必盛      
总结得很好
 回复 引用 查看   
#2楼 2009-05-17 19:32 紫色永恒      
总结得很好

 回复 引用 查看   
#3楼 2009-05-17 19:44 ilovedotnet      
总结得很好
 回复 引用 查看   
#4楼 2009-05-17 19:48 ppchen(陈荣林)      
小心开启IIS压缩后带来的问题,我碰到过一个问题:
http://www.cnblogs.com/ppchen/archive/2009/02/19/1382530.html

 回复 引用   
#5楼 2009-05-17 20:39 柳永法[未注册用户]
启用IIS6的GZIP功能,提高网站打开速度,减少带宽占用 - 柳永法(yongfa365)'Blog
http://www.yongfa365.com/item/IIS6-Enable-Web-GZIP.html

使用vbs+cmd,全自动实现,如果一个东西不常用,但很有用,还是把他做成一健式的,这样以后即便忘记也无所谓,反正可以一健100%成功。

哈哈

 回复 引用 查看   
#6楼 2009-05-17 20:49 Nick.Lee      
启用IIS6的GZIP功能,提高网站打开速度,减少带宽占用
但是,会增加客户端IE对CPU的占用时间...

提高了带宽,却影响了客户的电脑的效率...

 回复 引用 查看   
#7楼 2009-05-17 21:01 徐少侠      
客户端如今都64位双核啥啥的了,内存都至少1G,2G的

浪费这么点点关系不大了

倒是服务器能省点也好

 回复 引用 查看   
#8楼 2009-05-17 21:15 onedot      
现在的趋势是富客户端,因为硬件越来越强
不过问题是这个做法对于动态内容为主的网站而言或许会额外增加服务器的CPU负担,看IO和CPU比谁更是瓶颈了

 回复 引用 查看   
#9楼[楼主] 2009-05-17 21:43 ziqiu.zhang      
@onedot
一般瓶颈都是IO, 现在CPU的性能很多都浪费了.

现在滴客户端..你那点JS脚本还是能处理滴.
 回复 引用 查看   
#11楼 2009-05-17 23:05 Nick.Lee      
看应用的项目的客户群

如果应用于企业方面,要知道,现在很多企业的电脑有可能还是赛扬...

 回复 引用 查看   
#12楼[楼主] 2009-05-18 09:16 ziqiu.zhang      
@Nick.Lee
实践测试客户端性能可以忽略. 即使是586的机器也没问题. 用虚拟机测试的.

 回复 引用   
#13楼 2009-05-18 09:16 jisen007[未注册用户]
有没有IIS7的,我在IIS7下面没有找到metabase.xml
 回复 引用 查看   
#14楼 2009-07-30 20:18 阿瑞--16hi      
设置后 gzip没工作什么原因 指定的Cache目录里面一个文件都没有。
 回复 引用 查看   
#15楼 2009-10-20 22:11 李帅斌-Memory      
thanks
正用到这个东东了!

 回复 引用 查看   
#16楼 2010-06-24 16:08 量子动力-梁远华      
IIS7中启用JS的压缩具体的作法:
http://www.cnblogs.com/Leung/archive/2010/06/24/1764476.html

 回复 引用 查看   
#18楼 2011-01-07 11:36 蛙蛙王子      
不过这个操作如果你是在虚拟主机上运行网站,可能有些操作不让你弄,自己管理的站点完全可以操作。
 回复 引用 查看   
#19楼 2011-02-22 15:58 116啦网址导航      
好东西大家分享啊 http://www.116.la
 回复 引用 查看   
#20楼 2011-02-25 16:09 要了饿死      
不错的文章!学习配置下,增强点客户体验
 回复 引用 查看   
#21楼 2011-07-16 16:07 单雨帆      
抓狂中…… 全部都照文中所提示的弄了,怎么检测的还是没有压缩状态哦,狂晕!!
 回复 引用   
#22楼 2011-09-02 16:58 园林绿化[未注册用户]
我按照你的方法启用了GZIP压缩,测试的时候说没有启用 什么问题啊
 回复 引用   
#23楼 2011-09-15 14:56 最新图书[未注册用户]
不错,学习了
 回复 引用 查看   
#24楼 2011-09-22 14:11 卤水兄      
引用园林绿化:我按照你的方法启用了GZIP压缩,测试的时候说没有启用 什么问题啊


Me too!!

 回复 引用 查看   
#25楼 2011-09-22 14:12 卤水兄      
引用单雨帆:抓狂中…… 全部都照文中所提示的弄了,怎么检测的还是没有压缩状态哦,狂晕!!


Me tooooooooooooooooooooooo

 回复 引用 查看   
#26楼 2011-10-20 10:44 blosee      
感谢楼主分享啊,今天才知道有这个好东东~!
我已成功应用在http://www.7sousou.cc上了,呵呵
感谢~!

 回复 引用   
#27楼 2011-10-30 16:56 陶瓷刀[未注册用户]
已经使用了。感谢分享
 回复 引用 查看   
#28楼 2011-12-21 16:48 兰悦儿      
@徐少侠
恩,说得对.

 回复 引用 查看   
#29楼 2012-02-03 09:32 枫林——晚      
引用卤水兄:
引用单雨帆:抓狂中…… 全部都照文中所提示的弄了,怎么检测的还是没有压缩状态哦,狂晕!!


Me tooooooooooooooooooooooo


我也是

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1458899 YztsXeNbJ0Y=