HttpCompressionModule

Hace tiempo que tenía guardado por ahí un pequeño código que permite que nuestra aplicación ASP.NET envie el contenido conprimido al navegador, con lo que se ahorra en ancho de banda,
y como las transferencias tardan menos, se ahorra en memoria del servidor.

Ojito: Es un ejemplo, yo personalmente prefiero usar la compresión del IIS

namespace Comprime
{
    using System;
    using System.IO;
    using System.IO.Compression;
    using System.Web;

    public class HttpCompressionModule : IHttpModule
    {
        private void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication myApp = sender as HttpApplication;
            if (myApp != null)
            {
                string myAcceptEncoding = myApp.Request.Headers.Get("Accept-Encoding");
                if (!string.IsNullOrEmpty(myAcceptEncoding))
                {
                    myAcceptEncoding = myAcceptEncoding.ToLower();
                    if (myAcceptEncoding.Contains("gzip"))
                    {
                        myApp.Response.Filter = new GZipStream(myApp.Response.Filter, CompressionMode.Compress);
                        myApp.Response.AppendHeader("Content-Encoding", "gzip");
                    }
                    else if (myAcceptEncoding.Contains("deflate"))
                    {
                        myApp.Response.Filter = new DeflateStream(myApp.Response.Filter, CompressionMode.Compress);
                        myApp.Response.AppendHeader("Content-Encoding", "deflate");
                    }
                }
            }
        }

        void IHttpModule.Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(this.context_BeginRequest);
        }

        void IHttpModule.Dispose()
        {
            // Nothing
        }

    }
}