lnj 发表于 2013-1-28 20:51:43

对iis6启用http压缩

摘要
大名鼎鼎YSlow说了,要"Compress components with gzip"以提高网页显示速度。本文主要讲解如何对iis6启用http压缩。

环境

[*] windows server 2003 sp2
[*] ms framework 2.0 sp2
[*] iis6


背景资料
使用 HTTP 压缩
如果您的站点使用了很大的带宽,或者您希望更加有效地使用带宽,请考虑启用 HTTP 压缩。HTTP 压缩在启用压缩的浏览器和 IIS 之间提供了更短的传输时间。既可以只压缩静态文件,又可以同时压缩静态文件和应用程序响应。如果网络带宽受到限制,使用 HTTP 压缩会很有用(至少对于静态文件来说),除非处理器利用率已经很高。

动态处理会影响 CPU 资源。对动态响应启用压缩后,每次请求动态响应时都会进行压缩。这意味着并不缓存动态响应,每次请求动态响应时,服务器可能需要更多的 CPU 周期来压缩和发送响应。已压缩的静态响应可以被缓存,因此不会像动态响应那样影响 CPU 资源。

HTTP 压缩的工作原理
IIS 在接收到请求时,将检查浏览器是否允许压缩。然后 IIS 会检查文件扩展名,以确定请求的文件是否为静态文件或包含动态内容。如果文件包含静态内容,IIS 将查看以前是否请求过该文件并且已将该文件以压缩格式存储在临时压缩目录中。如果文件没有以压缩格式存储,IIS 会将未压缩的文件发送到浏览器,并在临时压缩目录中添加此文件的压缩副本。如果文件以压缩格式存储,IIS 会将压缩过的文件发送给浏览器。在浏览器首次请求之前,所有文件都不压缩。

如果文件包含动态内容,IIS 将在生成此响应时进行压缩并将压缩后的响应发送给浏览器。不存储此文件的副本。

压缩静态文件的性能代价较小,而且通常只压缩一次,因为该文件随后被存储在临时压缩目录中。压缩动态生成的文件的代价要高一些,因为它们并不存储,并且每次请求时都必须重新生成。在浏览器上展开文件的代价非常小。压缩文件的下载速度更快,所以对于提高使用有限带宽的网络连接(如调制解调器连接)的所有浏览器的性能特别有好处。

默认情况下,压缩文件的截止日期是 1997 年 1 月 1 日,以防止代理服务器将缓存的压缩文件副本发送到未启用压缩的浏览器。这也意味着浏览器在下一次用户请求时并不显示文件的缓存副本,而是返回服务器请求新副本。

http压缩算法
http压缩算法分为两种,deflate和gzip,iis和主流浏览器这两种压缩算法都支持,gzip从压缩效果及资源使用方面更好。

启用http压缩
1. 进入iis管理控制器,查看"网站"节点属性,在"服务"标签页中选中"启用应用程序文件"、"压缩静态文件"。
http://dl.iteye.com/upload/attachment/148635/d61bb6fc-b734-3df8-afc2-7cdeddb91ea3.png
2. 停止iis服务
运行iisreset -stop
3. 编辑MetaBase.xml
停止iis服务后才能编辑该文件,否则无法保存。打开C:\Windows\system32\inetsrv\MetaBase.xml:
<!-- deflate 算法配置 --><IIsCompressionSchemeLocation ="/LM/W3SVC/Filters/Compression/deflate"HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"HcCreateFlags="0"HcDoDynamicCompression="TRUE"HcDoOnDemandCompression="TRUE"HcDoStaticCompression="FALSE"<!-- 压缩级别,0~10,建议9 -->HcDynamicCompressionLevel="9"<!-- 静态文件扩展名(与动态生成文件区别参见上述"HTTP 压缩的工作原理") -->HcFileExtensions="htmhtmltxtjscsspnggifjpg"HcOnDemandCompLevel="10"HcPriority="1"<!-- 动态生成文件扩展名(与静态文件区别参见上述"HTTP 压缩的工作原理") -->HcScriptFileExtensions="aspdllexeaspxashx"></IIsCompressionScheme><!-- gzip 算法配置 --><IIsCompressionSchemeLocation ="/LM/W3SVC/Filters/Compression/gzip"HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"HcCreateFlags="1"HcDoDynamicCompression="TRUE"HcDoOnDemandCompression="TRUE"HcDoStaticCompression="TRUE"<!-- 压缩级别,0~10,建议9 -->HcDynamicCompressionLevel="9"<!-- 静态文件扩展名(与动态生成文件区别参见上述"HTTP 压缩的工作原理") -->HcFileExtensions="htmhtmltxtjscsspnggifjpg"HcOnDemandCompLevel="10"HcPriority="1"<!-- 动态生成文件扩展名(与静态文件区别参见上述"HTTP 压缩的工作原理") -->HcScriptFileExtensions="aspdllexeaspxashx"></IIsCompressionScheme>
4. 启动iis服务
运行iisreset -start

效果
启用压缩前后YSlow的评分对比:

修改前
http://dl.iteye.com/upload/attachment/148638/386537f6-90bb-3cb3-b0a1-2b3f70ebe5ce.png

修改后
http://dl.iteye.com/upload/attachment/148639/903e4db1-dd7e-340a-914c-fcbeb6cb298c.png
页: [1]
查看完整版本: 对iis6启用http压缩