当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在ASP.NET中实现GZip压缩?》经验,为你挑选了4个好方法。

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

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服务器配置).而且在上面的代码中,我没有得到最后两行,为什么使用它们以及这些行的目的是什么.请解释!

谢谢



1> dortzur..:

这是css和javascript文件的解决方案

  
    
    
      
      
      
      
    
    
      
      
      
      
    
  
  

信用:如何在ASP.NET和GoDaddy上进行GZip


应删除最后一行

2> Ben Scheirma..:

对于压缩JS和CSS文件,您实际上必须在IIS级别处理它,因为这些文件是在没有ASP.NET运行时的情况下直接呈现的.

你可以在IIS中创建一个JSX和CSSX扩展映射到aspnet_isapi.dll,然后利用你的邮政编码,但IIS可能会为你做得更好.

内容编码标头告诉浏览器它需要在呈现之前解压缩内容.根据内容的形状,有些浏览器足够聪明,无论如何都可以解决这个问题,但最好还是告诉它.

Accept-encoding缓存设置在那里,因此gzip压缩内容的缓存版本将不会发送到仅请求text/html的浏览器.


嗨@Ben,你能告诉我如何使用IIS压缩我的文件,我必须执行的所有设置,虽然我没有访问IIS配置,但我会尝试这样做.请告诉我如何使用IIS压缩文件?谢谢!
http://stackoverflow.com/a/6992948/8479详细介绍了IIS7或更高版本所需的web.config的简单更改.

3> Nudier Mena..:

这可能对你试用它很有用,它接受deflate和gzip压缩.

    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");
        }
    } 



4> intermension..:

它只压缩你的ASPX文件的原因是你编写的代码只嵌入在ASPX文件中.ASPX文件是来自其包含的任何链接内容的单独请求.因此,如果您有一个包含以下内容的ASPX页面:

example

这相当于从浏览器到资源的2个请求(除了DNS查询):

    对于aspx页面和

    对于aspx页面包含的图像.

每个请求都有自己的响应流.您发布的代码仅附加到ASPX响应流,这就是为什么只压缩您的ASPX页面.您发布的代码的第1行和第2行基本上接管了页面的正常响应流,并注入了一些"中间人"代码,在这种情况下,使用GZip流来处理和压缩正常输出流,然后将其发送到网络中.

第3和第4行正在设置响应标头.所有http请求和响应都具有在内容之前发送的标头.这些设置请求/响应,以便服务器和客户端知道发送的内容和方式.

在这种情况下,第3行通知客户端浏览器响应流是通过gzip压缩的,因此需要在显示之前由客户端浏览器解压缩.

第4行只是打开响应的Accept-Encoding标头.否则,这将不会出现在答复中.

您可以编写/获取可插入的模块,允许您压缩其他MIME类型的多个部分,例如*.js和*.css,但最好只使用IIS的内置压缩功能.

您还没有说过您正在使用的IIS版本,但如果它是IIS 7.0,则需要在web.config文件的部分中包含以下内容:

 
   
 
         
      
 
 

..

理查德

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有