压缩不起作用

时间:2012-06-22 05:36:06

标签: asp.net http iis compression

我需要压缩数据导出网站的所有动态内容 我尝试了很多方法,没有任何作用。 Chrome显示内容未压缩,并且“Content-Encoding”标头不存在。

尝试这样做作为最后的手段(在编写任何回复之前):

        context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
        context.Response.AppendHeader("Content-Encoding", "deflate");

日志记录显示此代码已正确执行。 但是,Chrome会再次显示内容未被压缩。

UPD使用IIS内置压缩时,它似乎工作并请求跟踪显示“DYNAMIC_COMPRESSION_SUCCESS”。但是,IE仍显示响应未压缩。当我使用localhost名称从服务器本身请求页面时也一样。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我没有尝试手动执行此操作,而是依赖于IIS中内置的预编写(并经过测试)的Microsoft代码,它将为您执行此操作:

安装Dynamic Content Compression on the machine(链接中的项目符号5)和enable it in IIS。 IIS现在将处理静态和动态内容的压缩。维护较少的代码(并且总是有错误)总是一件好事!

答案 1 :(得分:4)

如果您想手动执行此操作,请先检查是否支持压缩,

public static bool IsGZipSupported()
{
    string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
    if (!string.IsNullOrEmpty(AcceptEncoding) &&
            (AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate")))
        return true;
    return false;
}

压缩你的回复,

public static void GZipEncodePage()
{
            if (IsGZipSupported()) {
                HttpResponse Response = HttpContext.Current.Response;

                string AcceptEncoding = HttpContext.Current.Request.Headers("Accept-Encoding");
                if (AcceptEncoding.Contains("gzip")) {
                    Response.Filter = new System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress);
                    Response.AppendHeader("Content-Encoding", "gzip");
                } else {
                    Response.Filter = new System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress);


            Response.AppendHeader("Content-Encoding", "deflate");
}

您可以在标题发送到客户端之前检查过滤器

protected void Application_PreSendRequestHeaders()
{
    HttpResponse response = HttpContext.Current.Response;
    if (response.Filter is GZipStream && response.Headers["Content-encoding"] != "gzip")
        response.AppendHeader("Content-encoding", "gzip");
    else if (response.Filter is DeflateStream && response.Headers["Content-encoding"] != "deflate")
        response.AppendHeader("Content-encoding", "deflate");
}

有关更多信息,请查看此帖子;

答案 2 :(得分:-1)

如果您使用的是IIS7 +,则会出现“压缩”选项。导航到您的站点,在右侧主窗口中,单击“压缩”,然后选中所有2个复选框:

  1. 启用动态内容压缩
  2. 启用静态内容压缩