首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.NET中实现GZip压缩?

如何在ASP.NET中实现GZip压缩?
EN

Stack Overflow用户
提问于 2009-02-16 05:16:40
回答 8查看 97.9K关注 0票数 81

我正在尝试为我的asp.net页面(包括我的CSS和JS文件)实现GZip压缩。我尝试了以下代码,但它只压缩我的.aspx页面(从YSlow中找到)

代码语言:javascript
复制
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;

上面的代码只是压缩我的.aspx页面代码(标记),而不是包含在外部文件中的CSS和JS文件。请告诉我如何使用代码在ASP.NET中实现GZip压缩(因为我在共享主机服务器上,我无法访问IIS服务器配置)。而且在上面的代码中,我没有得到最后两行,为什么要使用它们,以及这些行的用途是什么。请解释一下!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-02-16 05:21:10

对于压缩JS & CSS文件,您实际上必须在IIS级处理,因为这些文件是直接呈现的,而不需要ASP.NET运行时。

您可以在IIS中将JSX和CSSX扩展映射到aspnet_isapi.dll,然后利用您的邮政编码,但是IIS可能会为您做得更好。

content-encoding标头告诉浏览器在呈现之前需要解压缩内容。有些浏览器足够聪明,可以根据内容的形状来解决这个问题,但最好是直接告诉它。

这里有接受编码缓存设置,这样gzipped内容的缓存版本就不会被发送到只请求text/html的浏览器。

票数 28
EN

Stack Overflow用户

发布于 2010-12-11 17:46:53

这是css和javascript文件的解决方案。将以下代码添加到web.config文件内的中:

代码语言:javascript
复制
<configuration>
  ...
  <system.webserver>
     ...
      <httpCompression>
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
        <dynamicTypes>
          <add mimeType="text/*" enabled="true"/>
          <add mimeType="message/*" enabled="true"/>
          <add mimeType="application/javascript" enabled="true"/>
          <add mimeType="*/*" enabled="false"/>
        </dynamicTypes>
        <staticTypes>
          <add mimeType="text/*" enabled="true"/>
          <add mimeType="message/*" enabled="true"/>
          <add mimeType="application/javascript" enabled="true"/>
          <add mimeType="*/*" enabled="false"/>
        </staticTypes>
      </httpCompression>
      <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
    ...
  </system.webserver>
  ...
<configuration>

图片来源:How to GZip on ASP.NET and GoDaddy

票数 47
EN

Stack Overflow用户

发布于 2011-12-11 07:10:15

这可能对你尝试一下很有用,它接受deflate和gzip压缩。

代码语言:javascript
复制
    void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
        string acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;

        if (app.Context.CurrentHandler == null)
            return;

        if (!(app.Context.CurrentHandler is System.Web.UI.Page ||
            app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
            app.Request["HTTP_X_MICROSOFTAJAX"] != null)
            return;

        if (acceptEncoding == null || acceptEncoding.Length == 0)
            return;

        acceptEncoding = acceptEncoding.ToLower();

        if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        {
            // deflate
            app.Response.Filter = new DeflateStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
        else if (acceptEncoding.Contains("gzip"))
        {
            // gzip
            app.Response.Filter = new GZipStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");
        }
    } 
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/552317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档