Update – I now realise this post is kind of pointless, there is a module for compression of dynamic content, called unsurprisingly DynamicCompressionModule… But the approach described may be useful for someone somewhere…
I couldn’t find anything that will GZip all the content returned by ASP.NET. There’s a module for compression of static files but nothing for dynamic content. There may be a good reason for this, perhaps the overhead of GZipping content on the fly can kill your server, but since my current project has no static content I thought it would be useful to give it a go. The solution is pretty simple, register the following module in web.config and you’re good to go.
using System; using System.IO.Compression; using System.Web; namespace MyNamespace { public class GzipModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(context_BeginRequest); } void context_BeginRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; if ((app.Request.Headers["Accept-Encoding"] != null) && (app.Request.Headers["Accept-Encoding"].Contains("gzip"))) { app.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress); app.Response.AppendHeader("Content-encoding", "gzip"); app.Response.Cache.VaryByHeaders["Accept-encoding"] = true; } } } }
Registration is as follows
<modules> <add name="GzipModule" type="MyNamespace.GzipModule" /> </modules>