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#程序设计有所帮助。
上一篇: C#中关于可空类型的小知识