在IIS7上使用MVC3时如何启用gzip压缩?

时间:2011-08-09 07:05:14

标签: asp.net-mvc asp.net-mvc-3 iis compression gzip

有人知道如何在MVC 3中启用gzip压缩吗?我正在使用IIS7。

Google Chrome Audit的结果:

  
      
  1. 启用gzip压缩(4)
  2.   
  3. 使用gzip压缩以下资源可以将传输大小减少大约三分之二(~92.23KB):
  4.   
  5. / mydomain /可以节省~1.53KB
  6.   
  7. jquery-1.4.4.min.js可以节省~51.35KB
  8.   
  9. Cufon.js可以节省~11.89KB
  10.   
  11. Futura.js可以节省~27.46KB
  12.   

3 个答案:

答案 0 :(得分:138)

您可以通过web.config文件配置压缩,如下所示:

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

您可以在iis.net/ConfigReference找到此配置元素的文档。这相当于:

  1. 打开Internet信息服务(IIS管理器)
  2. 浏览左侧的树视图,直至到达您要修改的虚拟目录
  3. 选择适当的虚拟目录,以便右侧窗格的标题成为所述虚拟目录的名称。
  4. 在右侧窗格的“IIS”下选择“压缩”
  5. 选中两个选项并选择最右侧“操作”下的“应用”。
  6. 注意:(正如评论中所指出的)您需要确保安装了Http Dynamic Compression,否则设置doDynamicCompression="true"将不会产生任何影响。最快的方法是:

    1. 开始&gt;输入optionalfeatures(这是获取“打开或关闭Windows功能”窗口的最快方式)
    2. 导航到Internet信息服务&gt;万维网服务&gt; “Windows功能”树视图中的性能功能
    3. 确保勾选“动态内容压缩”
    4. 单击“确定”并等待Windows安装组件

答案 1 :(得分:31)

如果您愿意,可以在代码中执行此操作。我会创建一个基本控制器,每个控件都继承自己,并使用下面的属性来装饰它。

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}

答案 2 :(得分:12)

在服务器级别启用/禁用压缩。请参阅iis管理控制台中的IIS压缩模块。

以下是来自微软网站的the instructions for IIS