【发布时间】:2012-01-07 00:02:31
【问题描述】:
我正在尝试在我们工作 Intranet 上的网站上启用 gzip 压缩。不幸的是,我无法访问 IIS,所以我所做的任何更改都是通过 web.config 进行的。
服务器正在运行 IIS 6 和 .NET 2.0。
我通过添加一个 httpmodule 来启用压缩
public class EnableCompression : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
}
private void Application_BeginRequest(Object source, EventArgs e)
{
HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
}
}
我在 web.config 中注册了...
<system.web>
<httpModules>
<add name="EnableCompression" type="EnableCompression"/>
</httpModules>
</system.web>
嗯,以上工作正常,除了 javascript 和 css 文件没有被压缩。根据我的发现,我必须将 .js 和 .css 添加到 IIS 6 中的应用程序映射中,但我当然不能这样做。
显然这可以通过 web.config 文件完成,但我不知道该怎么做。
如何为 .js 和 .css 文件启用压缩?
【问题讨论】:
-
您的代码有两个错误。首先,您应该检查传入的请求是否设置了
Accept-EncodingHTTP 标头,如果是,gzip 是否是允许的值之一(框架还支持放气,使用DeflateStream,实际上导致输出更小)。其次,VaryByHeaders设置仅在您启用输出缓存时有效,并告诉运行时通过指定的标头改变输出缓存。在您的情况下,对于Accept-Encoding的每个不同设置(包括无),您最终将在缓存中获得同一压缩页面的多个副本。 -
Thatnks,我一定会加入你的 cmets