Asp.net GZIP压缩导致网页过期

Asp.net GZIP压缩导致网页过期,asp.net,gzip,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 =

我已经在我的一些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中收到网页已过期的消息。将缓存控制设置为private似乎可以解决此问题:

base.Response.Cache.SetCacheability(HttpCacheability.Private);
但我不知道为什么,或者这是否会导致其他问题。我没有为站点中的任何其他页面设置任何缓存,而且该站点运行在只有十几个并发用户的intranet上,因此性能目前不是一个大问题。
Vary
header和WinInet/MSIE


似乎您应该发送
Vary:Accept Encoding
而不是
Vary:Content Encoding
,因为响应会根据请求头的不同而有所不同。

为什么不在IIS中打开它呢@ck:访问IIS控制台并非总是可能的,例如,您正在一家网络酒店上托管您的网站,或者您正在开发另一家公司将托管的网站,而您并不真正相信他们会知道如何设置IIS。不幸的是,我对服务器没有完全的管理员访问权限。我实际上忽略了IE6的Accept Encoding请求头,这有什么关系吗?事实上,仔细想想,这没什么关系,因为IE6根本不知道这些页面可以被GZIP压缩。不,这没什么关系。接受编码意味着“我可以处理这些编码”,但您可以随意忽略此功能并提供普通版本。