zoukankan      html  css  js  c++  java
  • 实现页面的GZip或Deflate压缩。

    .NET Framework里
    System.IO.Compression下有两个可用于页面压缩的类,GZipStream和 DeflateStream.
    ---
    在页面被传输之前,需要获取发出请求的客户端所采用的解码形式。
    可以通过Request.Headers["Accept-Encoding"]来获取。
    ---
    在页面被压缩之前,需要获取页面实体主体,可通过
    Response.Filter来获取(Stream类型)
    ------
    示例代码:

     1using System;
     2using System.Data;
     3using System.Configuration;
     4using System.Web;
     5using System.Web.Security;
     6using System.Web.UI;
     7using System.Web.UI.WebControls;
     8using System.Web.UI.WebControls.WebParts;
     9using System.Web.UI.HtmlControls;
    10using System.IO;
    11using System.IO.Compression;
    12
    13/// <summary>
    14/// GzipDeflate 的摘要说明
    15/// </summary>

    16public class GzipDeflate:IHttpModule
    17{
    18    public GzipDeflate()
    19    {
    20        //
    21        // TODO: 在此处添加构造函数逻辑
    22        //
    23    }

    24    public void Init(HttpApplication app)
    25    {
    26        app.BeginRequest += new EventHandler(app_BeginRequest);
    27    }

    28
    29    void app_BeginRequest(object sender, EventArgs e)
    30    {
    31        //HTTP头域可分为四类:通用头、请求头、响应头、实体头。
    32        HttpApplication app=(HttpApplication)sender;
    33        string acceptEncoding = app.Request.Headers["Accept-Encoding"]; //客户端支持的解码方式。属于请求头。
    34        Stream requestStream = app.Response.Filter;
    35        acceptEncoding = acceptEncoding.ToLower();
    36        if(acceptEncoding.Contains("gzip"))
    37        {
    38            app.Response.Filter = new GZipStream(requestStream, CompressionMode.Compress);
    39            app.Response.AppendHeader("Content-Encoding""gzip");
    40        }

    41        else if(acceptEncoding.Contains("deflate"))
    42        {
    43            app.Response.Filter = new DeflateStream(requestStream, CompressionMode.Compress);
    44            app.Response.AppendHeader("Content-Encoding""deflate"); //属于实体头。
    45        }

    46    }

    47    public void Dispose()
    48    {
    49
    50    }

    51}

    52
  • 相关阅读:
    vue 设置请求超时时间处理
    element 表格只展开一行(点击下一行上一行关闭)
    element菜单刷新后定位问题?
    自己觉得不错的滚动条样式
    $.ajax()方法详解
    安卓获取自有证书的SHA1码
    sortable.js 拖拽排序及配置项说明
    uni-app 引入本地iconfont的正确姿势以及阿里图标引入
    mui slider禁止滑动
    stl源码剖析 详细学习笔记 仿函数
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1208391.html
Copyright © 2011-2022 走看看