【发布时间】:2014-08-12 13:51:01
【问题描述】:
我正在使用 HttpModule 实现 gzip 压缩;这是它的样子:
public void Init(HttpApplication context)
{
context.BeginRequest += (new EventHandler(context_BeginRequest));
}
private void context_BeginRequest(Object source, EventArgs e)
{
HttpContext context = HttpContext.Current;
string url = context.Request.Url.ToString();
if (url.Contains("/ClientFiles"))
{
string AcceptEncoding = context.Request.Headers["Accept-Encoding"];
if (!string.IsNullOrEmpty(AcceptEncoding) && AcceptEncoding.Contains("gzip"))
{
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;
}
}
}
当我在本地机器上运行它时,我看到文件被 gzip 压缩并且一切正常。当我在不进行压缩的共享托管服务器上运行相同的代码时(即默认情况下不压缩文件),文件也会被压缩,但内容只是一堆不解压缩的字符。为什么会这样,我该如何解决?
我只想使用 HttpModule 实现 gzip,所以请不要 IIS 回答。
【问题讨论】:
-
你检查标题了吗?您的服务器是否返回 Content-Encoding?
-
尝试使用 Fiddler 捕获和比较两种情况的响应。当您访问托管服务器时,响应标头包含什么?主机可能正在替换或添加标头。是否缺少标题?响应/内容大小的差异?
-
在 web.config 文件中,我在
和 中注册了 HttpModule 可能是压缩了两次。我应该在哪个部分注册 HttpModule?