Niklas Christoffer Petersen har lavet det lille og fine compression modul i ASP.NET. Tillykke til dig Niklas.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO.Compression;
using System.IO;
using System.Text.RegularExpressions;
public class CompressionModule : IHttpModule
{
private IList<string> acceptedContentTypes;
public CompressionModule()
{
acceptedContentTypes = new List<string>
{ "text/html", "text/ccs", "text/javascript", "image/gif", "image/jpeg", "image/png" };
}
private void OnReleaseRequestState(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
string acceptEncoding = context.Request.Headers["Accept-Encoding"];
string contentType = context.Response.ContentType.ToLower();
/* Skal denne Content Type komprimeres og accepterer klienten komprimering? */
if (acceptEncoding != null && acceptedContentTypes.Any
(x => x.StartsWith(contentType, StringComparison.InvariantCultureIgnoreCase)))
{
acceptEncoding = acceptEncoding.ToLower();
if (acceptEncoding.Contains("deflate") || acceptEncoding.Equals("*"))
{
context.Response.AppendHeader("Content-Encoding", "deflate");
context.Response.Filter = new DeflateStream
(context.Response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("gzip"))
{
context.Response.AppendHeader("Content-Encoding", "gzip");
context.Response.Filter = new GZipStream
(context.Response.Filter, CompressionMode.Compress);
}
}
}
public void Init(HttpApplication context)
{
context.ReleaseRequestState += new EventHandler(OnReleaseRequestState);
}
public void Dispose() { }
}
Der er et par kilo bolscher, en bog en pizza cutter på vej til dig.