Я реализовал сжатие GZIP на нескольких моих страницах ASP.NET, используя класс, унаследованный от System.Web.UI.Page, и реализуя метод OnLoad для выполнения сжатия, например:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (Internet.Browser.IsGZIPSupported())
{
base.Response.Filter = new GZipStream(base.Response.Filter, CompressionMode.Compress, true);
base.Response.AppendHeader("Content-encoding", "gzip");
base.Response.AppendHeader("Vary", "Content-encoding");
}
else if (Internet.Browser.IsDeflateSupported())
{
base.Response.Filter = new DeflateStream(base.Response.Filter, CompressionMode.Compress, true);
base.Response.AppendHeader("Content-encoding", "deflate");
base.Response.AppendHeader("Vary", "Content-encoding");
}
}
Метод IsGZIPSupported просто определяет, поддерживает ли браузер GZIP, просматривая заголовок запроса Accept-encoding и пользовательский агент браузера (IE5-6 исключены из сжатия GZIP). Тем не менее, с этим кодом, я получаю сообщение об истечении срока действия веб-страницы в IE, когда я выполняю обратную передачу со страницы и пытаюсь использовать кнопку «Назад». Похоже, что установка контроля кэша в приватный режим решает проблему:
base.Response.Cache.SetCacheability(HttpCacheability.Private);
Но я не уверен, почему, или это вызовет другие проблемы. Я не установил никакого кэширования для каких-либо других страниц сайта, и сайт работает в интрасети с дюжиной одновременных пользователей, поэтому производительность на данный момент не является большой проблемой.