asp.net – 使用httpModule手动启用压缩
我正在尝试在我们的工作内联网上的站点上启用gzip压缩.不幸的是,我无法访问IIS,因此我所做的任何更改都是通过web.config进行的.
服务器正在运行IIS 6和.NET 2.0. 我通过添加httpmodule来启用压缩 public class EnableCompression : IHttpModule { public void Init(HttpApplication application) { application.BeginRequest += (new EventHandler(this.Application_BeginRequest)); } private void Application_BeginRequest(Object source,EventArgs e) { 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; } } 我在web.config中注册了… <system.web> <httpModules> <add name="EnableCompression" type="EnableCompression"/> </httpModules> </system.web> 好吧,以上工作正常,除了javascript和css文件不会被压缩.根据我的发现,我必须将.js和.css添加到IIS 6中的应用程序映射中,但当然我不能这样做. 显然这可以通过web.config文件完成,但我不知道该怎么做. 如何为.js和.css文件启用压缩? 解决方法
在IIS6中,托管HttpModules不处理静态代码;它需要本机ISAPI.
您可以使用的一个技巧是将* .js和* .css文件转换为动态文件.您可以将它们更改为* .aspx,并将ContentType设置为正确的MIME类型.例如: this.Response.ContentType = "application/x-javascript"; 唯一的另一个技巧是在标记文件的Page指令中设置StyleSheetTheme =“”.否则,运行时将坚持< head>文件中的部分.您可以启用输出缓存以最小化性能影响. 我在JS方面写了一篇关于这个的博客文章,如果它有帮助(CSS类似,只是使用不同的MIME类型):http://www.12titans.net/p/dynamic-javascript.aspx 不幸的是,这需要在您的应用程序中更改JS和CSS文件的名称,但如果您想要压缩并且无法访问IIS,我认为没有办法解决这个问题. 如果要保留* .js和* .css扩展名,可以通过在web.config中为它们添加处理程序来实现.例如: <compilation> <buildProviders> <add extension=".css" type="System.Web.Compilation.PageBuildProvider"/> </buildProviders> </compilation> <httpHandlers> <add path="*.css" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/> </httpHandlers> 这有助于从命名角度而非性能;这些文件仍然是动态的 – 它们基本上是* .aspx文件,但具有不同的扩展名.它也无法与ASP.NET主题一起正常工作,因为无论其扩展名如何,主题文件夹中的页面都不能是动态的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |