如何使 IIS7 能够 gzip 静态文件(如 js 和 css)以及如何在发送到客户端之前测试 IIS7 是否真的对它们进行 gzip 压缩?
10 回答
配置
您可以在Web.config
文件中完全启用 GZIP 压缩。如果您在共享主机上并且无法直接配置 IIS,或者您希望您的配置在您的所有目标环境之间传输,这将特别有用。
<system.webServer>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>
测试
要测试压缩是否有效,请使用Chrome或Firebug for Firefox中的开发人员工具,并确保设置了 HTTP 响应标头:
Content-Encoding: gzip
请注意,如果响应代码为 304(未修改),则不会出现此标头。如果是这种情况,请进行完全刷新(在按下刷新按钮时按住 shift 或 control)并再次检查。
您需要在 Windows 功能控制面板中启用该功能:
HttpModule 中的全局 Gzip
如果您无权访问最终的 IIS 实例(共享主机...),您可以创建一个 HttpModule 将此代码添加到每个 HttpApplication.Begin_Request 事件:
HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
测试
荣誉,没有测试就没有解决方案。我喜欢使用 Firefox 插件“ Liveheaders ”,它显示了浏览器和服务器之间每条 http 消息的所有信息,包括压缩、文件大小(您可以将其与服务器上的文件大小进行比较)。
如果您将 YSlow 与 Firebug 一起使用并分析您的页面性能,YSlow 肯定会告诉您页面上的哪些工件不是经过 gzip 压缩的!
如果您还尝试 gzip 动态页面(如 aspx)但它不起作用,可能是因为未启用该选项(您需要使用 Windows 功能安装动态内容压缩模块):
http://support.esri.com/en/knowledgebase/techarticles/detail/38616
Another easy way to test without installing anything, neither is it dependent on IIS version. Paste your url to this link - SEO Checkup
To add to web.config: http://www.iis.net/configreference/system.webserver/httpcompression
尝试安装了 Firebug 插件的 Firefox。我正在使用它;Web 开发人员的绝佳工具。
我也使用 web.config 在我的 IIS7 中启用了 Gzip 压缩。