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
  • 相关阅读:
    error in ./src/views/demo/ueditor.vue Module build failed: Error: Cannot find module 'node-sass' Require stack:
    Spring Cloud Stream 定时任务消息延迟队列
    项目结构介绍
    Java面试题
    SpringBoot中用SpringSecurity实现用户登录并返回其拥有哪些角色
    MySQL索引优化
    MySQL中的执行计划explain
    SpringBoot之单体应用
    SpringBoot之SSM多模块应用
    Spring-aop面向切面编程笔记
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1208391.html
Copyright © 2011-2022 走看看