【问题标题】:gzip working on localhost but not on servergzip 在本地主机上工作,但不在服务器上
【发布时间】: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?

标签: c# asp.net gzip


【解决方案1】:

我的猜测是您的共享托管服务器已经启用了 gzip 压缩(很抱歉,这是一种“IIS 答案”......),因此内容被压缩了两次。

您可以通过暂时禁用自己的压缩代码来轻松检查这一点,并检查内容是否被压缩。

【讨论】:

  • 我也这么认为,但事实并非如此:文件没有从服务器压缩出来。进行了编辑以澄清。
  • 在 web.config 文件中,我在 中注册了 HttpModule 可能是压缩了两次。我应该在哪个部分注册 HttpModule?
  • 我遇到了确切的问题,你知道是什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多