博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
启用IIS的Gzip压缩功能
阅读量:5826 次
发布时间:2019-06-18

本文共 3654 字,大约阅读时间需要 12 分钟。

     现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更高的带宽利用率。对于纯文本来讲,压缩率是相当可观的。如果每个用户节约50%的带宽,那么你租用来的那点带宽就可以服务多一倍的客户了。

IIS6已经内建了Gzip压缩的支持,可惜,没有设置更好的管理界面。所以要打开这个选项,还要费些功夫。

首先,如果你需要压缩静态文件(HTML),需要在硬盘上建一个目录,并给它“IUSR_机器名”这个用户的写权限。如果压缩动态文件(PHP,asp,aspx)就不需要了,因为它的页面是每次都动态生成的,压缩完就放弃。然后在IIS管理器中,“网站”上面右键-属性,不是下面的某个站点,而是整个网站。进入“服务”标签,选上启用动态内容压缩,静态内容压缩。

然后选中网站下面那个服务器扩展,新建一个服务器扩展。名字无所谓,下面的添加文件的路径是:

c:\windows\system32\inetsrv\gzip.dll,然后启用这个扩展。

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

在c:\windows\system32\inetsrv\下面有个MetaBase.xml文件,可以用记事本打开,找到IIsCompressionScheme,有三个相同名字的段,分别是deflate,gzip,Parameters,第三段不用管它,前两段有基本相同的参数,在这两段的参数HcScriptFileExtensions下面都加上一行aspx,如果你有其它的动态程序要压缩,也加在这里。HcDynamicCompressionLevel改成9,(0-10,9是性价比最高的一个)。

然后需要重启一下IIS服务,就可以体会到压缩后的速度了。不过通常可能不会有太明显的感觉,可以用这个页面来检查你的网页是否压缩过了,以及压缩比和加快的速度。整个过程对CPU的占用基本上感觉不出来。

 

现在主流浏览器基本都支持 Gzip 压缩,因此这也成了 WebServer 优化策略的一种常规手段。启用压缩后能有效减少网页传输数据大小,使得有限带宽能提供更多的请求,并在一定程度上提高了网页 "显示" 速度。

11_160912_1.gif
IIS6 提供了对 Gzip 的支持,只可惜有点不完善,需要我们自己手工做些设置。
步骤
1. 在 "IIS 管理器" 中,打开 "网站 > 属性" 对话框,切换到 "服务" 页卡,选中两个压缩选项。
11_160916_2.gif
2. 新增一个服务扩展,路径为 "%windir%\System32\inetsrv\gzip.dll"。添加完成后,允许该扩展使用。
11_160921_3.gif
3. 在 "管理工具 > 服务" 中,停止 "IIS Admin Service"。
11_160927_4.gif
4. 用记事本打开 "%windir%\system32\inetsrv\MetaBase.xml",找到 "IIsCompressionScheme",按下述方法修改、保存。(建议修改前先做备份)
如果需要压缩动态文件,则将 HcDoDynamicCompression设置为"TRUE",并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx (由于我要优化的系统中,做了 html -> aspx 的 URL Rewrite,所以将 html、htm 也加入了)。
如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为 "TRUE",并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等。 
HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数字(0~9)越小压缩率越低。
11_160932_5.gif
5. 重启服务器。
测试
我们用 HttpWatch Professional 4.1 看看启用 GZip 后的效果。
11_160937_6.gif
看来效果非常不错。 

 

当前的 IIS 压缩部署不能对高速缓存响应进行精密控制。您可以选择使用 
metabase.xml 中的 
HcSendCacheHeaders 节点来开/关高速缓存标头。请参考 MSDN 文件了解关于每项设置的更多帮助信息。


对于源站采用IIS的情况 在IIS启用了压缩后,返回的头里 Expires的值为 Wed, 01 Jan 1997 12:00:00 GMT,所以SQUID会立即过期,从而无法缓存。 解决的方法为,修改 C:\windows\system32\inetsrv\MetaBase.xml,找到 HcExpiresHeader="Wed, 01 Jan 1997 12:00:00 GMT" 将其修改为 HcExpiresHeader="Wed, 01 Jan 2038 12:00:00 GMT"

 

<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"
 HcOnDemandCompLevel="10"
 HcPriority="1"
 HcScriptFileExtensions="asp
 dll
 html
shtml
htm
aspx
js
css
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"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
dll
html
shtml
htm
aspx
js
css
exe"
>
</IIsCompressionScheme>
<IIsCompressionSchemes Location ="/LM/W3SVC/Filters/Compression/Parameters"
HcCacheControlHeader="max-age=86400"
HcCompressionBufferSize="8192"
HcCompressionDirectory="E:\htmlcache"
HcDoDiskSpaceLimiting="FALSE"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcExpiresHeader="Wed, 01 Jan 2038 12:00:00 GMT"
HcFilesDeletedPerDiskFree="256"
HcIoBufferSize="8192"
HcMaxDiskSpaceUsage="99614720"
HcMaxQueueLength="1000"
HcMinFileSizeForComp="1"
HcNoCompressionForHttp10="TRUE"
HcNoCompressionForProxies="TRUE"
HcNoCompressionForRange="FALSE"
HcSendCacheHeaders="TRUE"
>

转载于:https://www.cnblogs.com/lvsong/archive/2010/04/14/1775663.html

你可能感兴趣的文章
Linux系统调用、新增系统调用方法【转】
查看>>
寻找链表相交节点
查看>>
jquery对象 与 document 对象的互为转换关系
查看>>
LeetCode OJ:Path Sum II(路径和II)
查看>>
Python 核心编程(第二版)——函数和函数式编程
查看>>
AS3——禁止swf缩放
查看>>
理清PHP在Linxu下执行时的文件权限
查看>>
匿名对象、内部类、匿名内部类、局部代码块、构造代码块、静态代码块
查看>>
八枚银币
查看>>
说给部分程序员听
查看>>
linq 学习笔记之 Linq基本子句
查看>>
Java中新建子文件夹和新建文件
查看>>
[Js]布局转换
查看>>
Hot Bath
查看>>
国内常用NTP服务器地址及
查看>>
Java annotation 自定义注释@interface的用法
查看>>
go的接口
查看>>
[UVA 11997] K Smallest Sums
查看>>
Android 配置从GitHub上下载下来的不太规则的源代码库,并保证程序正常运行
查看>>
《Spring1之第四次站立会议》
查看>>