Asp.net-Mvc
Gzip 壓縮不起作用 ASP.net MVC5
我想用 Gzip 壓縮我的 Web 應用程序,我正在使用以下類
壓縮過濾器
public class CompressFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpRequestBase request = filterContext.HttpContext.Request; string acceptEncoding = request.Headers["Accept-Encoding"]; if (string.IsNullOrEmpty(acceptEncoding)) return; acceptEncoding = acceptEncoding.ToUpperInvariant(); HttpResponseBase response = filterContext.HttpContext.Response; if (acceptEncoding.Contains("GZIP")) { response.AppendHeader("Content-encoding", "gzip"); response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); } else if (acceptEncoding.Contains("DEFLATE")) { response.AppendHeader("Content-encoding", "deflate"); response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); } } }記憶體過濾器
public class CacheFilterAttribute : ActionFilterAttribute { public int Duration { get; set; } public CacheFilterAttribute() { Duration = 1; } public override void OnActionExecuted(ActionExecutedContext filterContext) { if (Duration <= 0) return; HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; TimeSpan cacheDuration = TimeSpan.FromMinutes(Duration); cache.SetCacheability(HttpCacheability.Public); cache.SetExpires(DateTime.Now.Add(cacheDuration)); cache.SetMaxAge(cacheDuration); cache.AppendCacheExtension("must-revalidate, proxy-revalidate"); } }控制器
[CompressFilter] [CacheFilter(Duration = 60)] public ActionResult Index() {}並將此類應用於控制器中的操作。但是在螢火蟲中它仍然顯示**“Transfer-Encoding: chunked”,但它應該是“Transfer-Encoding: gzip”**。
我正在本地主機上測試它。
請告訴我我做錯了什麼?謝謝並恭祝安康。
更新記憶體過濾器工作正常,但仍然沒有 gzip 壓縮,下面是 chrome 中的響應頭。
Cache-Control:public, must-revalidate, proxy-revalidate, max-age=3600 Content-Type:text/html; charset=utf-8 Date:Wed, 22 Jul 2015 13:39:06 GMT Expires:Wed, 22 Jul 2015 14:39:04 GMT Server:Microsoft-IIS/10.0 Transfer-Encoding:chunked X-AspNet-Version:4.0.30319 X-AspNetMvc-Version:5.1 X-Powered-By:ASP.NET X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNcQXJiYXpcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxM1xQcm9qZWN0c1xidXlwcmljZXNwYWtpc3RhblxCdXlQaG9uZQ==?=有什麼辦法可以完成這項工作,我真的需要幫助,謝謝
如果您無法控制 IIS,只需將其添加到您的 Global.ASCX。在 Android、iPhone 和大多數 PC 瀏覽器上測試。
protected void Application_BeginRequest(object sender, EventArgs e) { // Implement HTTP compression HttpApplication app = (HttpApplication)sender; // Retrieve accepted encodings string encodings = app.Request.Headers.Get("Accept-Encoding"); if (encodings != null) { // Check the browser accepts deflate or gzip (deflate takes preference) encodings = encodings.ToLower(); if (encodings.Contains("deflate")) { app.Response.Filter = new DeflateStream(app.Response.Filter, CompressionMode.Compress); app.Response.AppendHeader("Content-Encoding", "deflate"); } else if (encodings.Contains("gzip")) { app.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress); app.Response.AppendHeader("Content-Encoding", "gzip"); } } }