.NET ez 2012-11-11
未壓縮:
已壓縮:
使用 IHttpModule 就可以達成了。
範例下載:PageCompression
首先在web.config新增一筆項目:
<system.webServer> <modules> <add name="PageGzip" type="PageCompression.PageGzip" /> </modules> </system.webServer>
新增一個class:
using System; using System.IO; using System.IO.Compression; using System.Web; namespace PageCompression { public class PageGzip : IHttpModule { #region IHttpModule 成員 void IHttpModule.Dispose() { //Dispose } void IHttpModule.Init(HttpApplication context) { //加入壓縮事件 context.BeginRequest += new EventHandler(context_BeginRequest); } #endregion void context_BeginRequest(object sender, EventArgs e) { //提取Application HttpApplication app = (HttpApplication)sender; //判斷是否為*.axd (此檔不可壓縮) if (app.Request.Path.Contains("axd")) return; //提取支援的壓縮格式 string encodiongs = app.Request.Headers.Get("Accept-Encoding"); //判斷是否支援壓縮 if (string.IsNullOrEmpty(encodiongs)) { app.Context.Items["Compression"] = "Compression disabled"; return; } //提取輸出資料流 Stream Filter = app.Response.Filter; //將壓縮格式轉小寫 encodiongs = encodiongs.ToLower(); //判斷是否支援Gzip if (encodiongs.Contains("gzip")) { //將壓縮過的資料流取代原本的資料流 app.Response.Filter = new GZipStream(Filter, CompressionMode.Compress); //將壓縮格式加入至標頭 app.Response.AppendHeader("Content-Encoding", "gzip"); //將壓縮格式寫入事件 app.Context.Trace.Warn("Gzip enabled"); app.Context.Items["Compression"] = "Gzip enabled"; } else { //將壓縮過的資料流取代原本的資料流 app.Response.Filter = new DeflateStream(Filter, CompressionMode.Compress); //將壓縮格式加入至標頭 app.Response.AppendHeader("Content-Encoding", "deflate"); //將壓縮格式寫入事件 app.Context.Trace.Warn("Deflate enabled"); app.Context.Items["Compression"] = "Deflate enabled"; } } } }
設定完成,趕快試試看吧!
標籤: .NET