在 Application_BeginRequest 根據客戶端 Accept-Encoding 標頭動態設定回應濾流器:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
string acceptEncoding = app.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToLower();
Stream prevStream = app.Response.Filter;
if (acceptEncoding.Contains("gzip"))
{
app.Response.Filter = new GZipStream(prevStream, CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate"))
{
app.Response.Filter = new DeflateStream(prevStream, CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
}
WebResource.axd 輸出被壓縮導致圖片無法載入。WebResource.axd、ScriptResource.axd 等靜態資源請求,不進行壓縮。壓縮可大幅減少傳輸體積(通常 70%+),但會增加 CPU 負載。建議搭配 IIS 內建動態壓縮模組,或使用 Fiddler 實測效果後再決定是否啟用。