【发布时间】:2010-12-18 05:18:52
【问题描述】:
我已经在我的一些 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 上运行,因此目前性能不是大问题。
【问题讨论】:
-
为什么不在 IIS 中打开它? weblogs.asp.net/owscott/archive/2004/01/12/57916.aspx
-
@ck:并非总是可以访问 IIS 控制台,例如您在网络酒店上托管您的网站,或者您正在开发一个由其他公司托管的网站,但您并不真正相信他们会知道如何设置 IIS。
-
很遗憾,我没有对服务器的完全管理员访问权限。