启用IIS7 gzip


229

如何使IIS7能够对js和css之类的静态文件进行gzip压缩,以及如何在发送给客户端之前测试IIS7是否对它们进行了gzip压缩?

Answers:


243

组态

您可以在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>

测验

要测试压缩是否正常工作,请使用ChromeFirebug for Firefox中开发人员工具,并确保已设置HTTP响应标头:

Content-Encoding: gzip

请注意,如果响应代码为304(未修改),则此标头将不存在。如果是这种情况,请进行完全刷新(按住刷新按钮的同时按住Shift或控制),然后再次检查。


@DenNukem,对不起,我不确定。我只在IIS7上测试过。还有其他人想发表评论吗?
Drew Noakes

21
当心-仅当解锁applicationhost.config中的httpCompression部分时,它才起作用。默认情况下,该部分被锁定以进行修改,因此无法在web.config中进行覆盖。在这个上浪费了几个小时。stackoverflow.com/a/2894695/245460,请参阅下面的评论文章。
卡雷尔·卡拉

确保其已安装的Web角色功能以及MSDN的已安装功能:“您还可以为MIME类型添加通配符条目。但是,您只能为Web服务器级别设置MIME类型。例如,为所有默认网站的MIME类型,请首先为服务器级别的MIME类型添加通配符条目,然后为默认网站启用静态压缩。”
路加·普普利特

12
除非您在服务器上安装了动态内容压缩模块(可通过Web平台安装程序获得),否则动态压缩也将不起作用。如果您使用的是Css / Js捆绑包,则将需要此设置。
2013年

只有css正在压缩,.js不是。另外,尝试添加application/x-javascript。与tomcat一起使用,因此删除了该directory参数。
—coding_idiot15年

58

您将需要在Windows功能控制面板中启用该功能:

IIS功能屏幕截图


16
在Windows Server 2008 R2中,它位于服务器管理器>角色> Web服务器(IIS)下。单击“角色”部分中的“添加角色服务”。“性能”标题下列出了“动态内容压缩”。
Jonathan Little

37

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消息的所有信息,包括压缩,文件大小(您可以将其与服务器上的文件大小进行比较)。


3
我正在使用共享托管,不需要编写任何代码即可启用GZIP输出压缩。仅通过Web.config就可以实现。见我的回答:stackoverflow.com/questions/702124/enable-iis7-gzip/...
德鲁诺克斯

2
我将前三行放在要压缩的一个aspx页面的开头,并且可以正常工作!谢谢!这比任何其他方法都省事得多,它对我来说适用于IIS 6。
DenNukem 2011年

1
这绝对是做到这一点的方法。
马修·詹姆斯·戴维斯


2

我只需要像查理提到的那样在Windows功能中添加该功能。对于无法在Windows 10或Server 2012+上找到它的人,请如下所示。我有点挣扎

Windows 10

在此处输入图片说明

Windows Server 2012 R2

在此处输入图片说明

视窗伺服器2016

在此处输入图片说明


1

如果您将YSlow与Firebug结合使用并分析页面性能,YSlow肯定会告诉您页面上哪些工件没有gzip压缩!





By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.