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

ima*_*c84 98 compression iis asp.net-mvc gzip asp.net-mvc-3

有谁知道如何在MVC 3中启用gzip压缩?我正在使用IIS7.

Google Chrome Audit的结果:

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

Rob*_*Rob 139

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

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

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

  1. 打开Internet信息服务(IIS管理器)
  2. 浏览左侧的树视图,直到到达要修改的虚拟目录
  3. 选择适当的虚拟目录,以便右侧窗格的标题成为所述虚拟目录的名称.
  4. 在右侧窗格的"IIS"下选择"压缩"
  5. 选中两个选项并选择最右侧"操作"下的"应用".

注意:( 正如评论中所指出的)您需要确保安装了Http Dynamic Compression,否则设置doDynamicCompression="true"将不起作用.最快的方法是:

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

  • 在Windows Server 2008上,`optionalfeatures`对我来说不起作用.而是导航到服务器管理器>角色>滚动到Web服务器(IIS)>单击添加角色服务.现在确保安装了Web Server>性能>静态内容压缩和动态内容压缩. (16认同)
  • 值得注意的是,您需要安装Http Compression Dynamic IIS选项才能使其正常工作.此答案中的配置参考链接具有详细信息. (11认同)
  • 至少在我的经验中,这压缩了一切但是MVC控制器的输出.它们由于某种原因返回HTML而没有任何gzip压缩. (2认同)

Net*_*oke 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于重定向,防止`filter`为null非常重要.我用`var response = ...; if(response == null || response.Filter == null)return;`. (4认同)
  • @JustAnotherUserYouMayKnow - 取决于您如何为您的资源提供服务; 如果您直接指向服务器上的文件然后没有,但是如果您通过操作提供服务(因为我们的资源管理系统允许我们),那么它的工作非常出色.BTW Rick Strahl对此进行了更新以支持检查客户端实际上[在压缩前支持gzip](http://www.west-wind.com/weblog/posts/2012/Apr/28/GZipDeflate-Compression-in-ASPNET- MVC) (2认同)
  • 另外,你可能想先使用`gzip`而不是`deflate`,在这里阅读更多内容:http://stackoverflow.com/a/9856879/1026459 (2认同)

nak*_*hli 12

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

以下是来自microsoft站点的IIS的说明.