加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 使用httpModule手动启用压缩

发布时间:2020-12-16 09:36:04 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试在我们的工作内联网上的站点上启用gzip压缩.不幸的是,我无法访问IIS,因此我所做的任何更改都是通过web.config进行的. 服务器正在运行IIS 6和.NET 2.0. 我通过添加httpmodule来启用压缩 public class EnableCompression : IHttpModule{ public void
我正在尝试在我们的工作内联网上的站点上启用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主题一起正常工作,因为无论其扩展名如何,主题文件夹中的页面都不能是动态的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读