.Net 壓縮 ASPX 網頁內容 GZIP .Net 壓縮 ASPX 網頁內容 GZIP
  .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

我要留言