• GzipModule 实现


    /// <summary>
    /// 能支持双向GZIP压缩的Module,它会根据客户端是否启用GZIP来自动处理。
    /// 对于服务来说,不用关心GZIP处理,服务只要处理输入输出就可以了。
    /// </summary>
    internal class DuplexGzipModule : IHttpModule
    {
        public void Init(HttpApplication app)
        {
            app.BeginRequest += new EventHandler(app_BeginRequest);
        }
    
        void app_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication)sender;
    
            // 注意:这里不能使用"Accept-Encoding"这个头,二者的意义完全不同。
            if( app.Request.Headers["Content-Encoding"] == "gzip" ) {
                app.Request.Filter = new GZipStream(app.Request.Filter, CompressionMode.Decompress);
    
                app.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress);
                app.Response.AppendHeader("Content-Encoding", "gzip");
            }
        }
    
        public void Dispose()
        {
        }
    }

    每个HttpModule只需要实现IHttpModule接口就可以了。IHttpModule也是个简单的接口:

    public interface IHttpModule
    {
        void Dispose();
    
        void Init(HttpApplication app);
    }

    让HttpModule工作也需要在web.config中注册:

    <httpModules>
        <add name="DuplexGzipModule" type="MySimpleServiceFramework.DuplexGzipModule"/>
    </httpModules>

     

  • 相关阅读:
    WQS二分
    虚树
    洛谷集训队题单Part1
    动态点分治
    点分治
    最小乘积模型
    线段树分治
    分层图最短路
    学长学姐们的测试-2
    线性dp
  • 原文地址:https://www.cnblogs.com/sntetwt/p/3027932.html
Copyright © 2020-2023  润新知