欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现页面GZip或Deflate压缩的方法

程序员文章站 2023-11-17 19:10:40
本文实例讲述了c#实现页面gzip或deflate压缩的方法。分享给大家供大家参考。具体分析如下: .net framework里 system.io.compress...

本文实例讲述了c#实现页面gzip或deflate压缩的方法。分享给大家供大家参考。具体分析如下:

.net framework里
system.io.compression下有两个可用于页面压缩的类,gzipstream和 deflatestream.

在页面被传输之前,需要获取发出请求的客户端所采用的解码形式。
可以通过request.headers["accept-encoding"]来获取。

在页面被压缩之前,需要获取页面实体主体,可通过
response.filter来获取(stream类型)

示例代码:

using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;
using system.io.compression;
/// <summary>
/// gzipdeflate 的摘要说明
/// </summary>
public class gzipdeflate:ihttpmodule
{
  public gzipdeflate()
  {
    //
    // todo: 在此处添加构造函数逻辑
    //
  }
  public void init(httpapplication app)
  {
    app.beginrequest += new eventhandler(app_beginrequest);
  }
  void app_beginrequest(object sender, eventargs e)
  {
    //http头域可分为四类:通用头、请求头、响应头、实体头。
    httpapplication app=(httpapplication)sender;
    string acceptencoding = app.request.headers["accept-encoding"];
    //客户端支持的解码方式。属于请求头。
    stream requeststream = app.response.filter;
    acceptencoding = acceptencoding.tolower();
    if(acceptencoding.contains("gzip"))
    {
      app.response.filter = new gzipstream(requeststream, compressionmode.compress);
      app.response.appendheader("content-encoding", "gzip");
    }
    else if(acceptencoding.contains("deflate"))
    {
      app.response.filter = new deflatestream(requeststream, compressionmode.compress);
      app.response.appendheader("content-encoding", "deflate");
      //属于实体头。
    }
  }
  public void dispose()
  {
  }
}

希望本文所述对大家的c#程序设计有所帮助。