如何在IIS7上使用MVC3时启用gzip压缩?
有谁知道如何在MVC 3中启用gzip压缩? 我正在使用IIS7。
谷歌Chrome审计的结果:
- 启用gzip压缩(4)
- 使用gzip压缩以下资源可将其传输大小减less约三分之二(约92.23KB):
- / mydomain /可以保存〜1.53KB
- jquery-1.4.4.min.js可以节省〜51.35KB
- Cufon.js可以保存〜11.89KB
- Futura.js可以节省〜27.46KB
您可以通过您的web.config
文件configuration压缩,如下所示:
<system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer>
您可以在iis.net/ConfigReference中find此configuration元素的文档 。 这相当于:
- 打开Internet信息服务(IISpipe理器)
- 浏览左侧的树形视图,直到到达想要修改的虚拟目录
- select适当的虚拟目录,以便右侧窗格的标题成为所述虚拟目录的名称。
- 在右侧窗格的“IIS”下select“压缩”
- 选中这两个选项,然后在最右边的“操作”下select“应用”。
注意:( 正如在注释中指出的那样)您需要确保安装了Http Dynamic Compression,否则设置doDynamicCompression="true"
将不会产生任何影响。 最快的方法是:
- 开始>键入
optionalfeatures
(这是进入“打开或closuresWindowsfunction”窗口的最快捷方式) - 导航到“Windowsfunction”树视图中的Internet信息服务>万维网服务>性能function
- 确保选中“dynamic内容压缩”
- 点击“确定”,等待Windows安装组件
如果你愿意的话,你可以用代码来做到这一点。 我会做一个基础控制器,每个控件inheritance和装饰它下面的这个属性。
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); } } }
在服务器级别启用/禁用压缩。 请参阅iispipe理控制台中的IIS压缩模块。
以下是来自Microsoft网站的IIS说明 。