.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
