GZIP压缩导致网页过期

时间:2009-11-19 08:41:06

标签: asp.net gzip

我已经在一些ASP.NET页面上实现了GZIP压缩,使用了一个继承自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);

但我不确定为什么,或者这是否会导致其他问题。我没有为站点中的任何其他页面设置任何缓存,并且该站点在只有十几个并发用户的Intranet上运行,因此性能目前不是一个大问题。

1 个答案:

答案 0 :(得分:2)

Vary标题上的

See this article和WinInet / MSIE

您似乎应该发送Vary: Accept-Encoding而不是Vary: Content-Encoding,因为响应会因请求标头而异。