实现页面的GZip或Deflate压缩。

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

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

16 None.gif public   class  GzipDeflate:IHttpModule
17 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
18InBlock.gif    public GzipDeflate()
19ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
20InBlock.gif        //
21InBlock.gif        // TODO: 在此处添加构造函数逻辑
22InBlock.gif        //
23ExpandedSubBlockEnd.gif    }

24InBlock.gif    public void Init(HttpApplication app)
25ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
26InBlock.gif        app.BeginRequest += new EventHandler(app_BeginRequest);
27ExpandedSubBlockEnd.gif    }

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

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

46ExpandedSubBlockEnd.gif    }

47InBlock.gif    public void Dispose()
48ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
49InBlock.gif
50ExpandedSubBlockEnd.gif    }

51ExpandedBlockEnd.gif}

52 None.gif

转载于:https://www.cnblogs.com/McJeremy/archive/2008/05/27/1208391.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值