Сжатие GZIP вызывает истечение срока действия веб-страницы - PullRequest
1 голос
/ 19 ноября 2009

Я реализовал сжатие 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);

Но я не уверен, почему, или это вызовет другие проблемы. Я не установил никакого кэширования для каких-либо других страниц сайта, и сайт работает в интрасети с дюжиной одновременных пользователей, поэтому производительность на данный момент не является большой проблемой.

1 Ответ

2 голосов
/ 19 ноября 2009

См. Эту статью в заголовке Vary и WinInet / MSIE

Похоже, вам следует отправлять Vary: Accept-Encoding вместо Vary: Content-Encoding, поскольку ответ будет зависеть от запроса заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...