关于httpcompression asp.net

时间:2011-12-03 19:23:24

标签: asp.net http-compression

我看到人们只是检测到请求浏览器是否支持http压缩。如果支持然后检测支持gzip或deflate。

然后只需将属性添加到响应对象,如

HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");

HttpContext.Current.Response.AppendHeader("Content-encoding", "deflate");

我只需知道究竟是谁在回应。是webserver还是asp.net工作进程。请详细说明压缩响应的人和方式。感谢

1 个答案:

答案 0 :(得分:1)

实际上,您在此处显示的标题不会进行压缩。是什么让压缩是你在Response.Filter上设置的Stream Class,这个压缩是由Asp.Net做的,如:

    if (acceptEncoding.Contains("gzip"))
    {
        // gzip
        app.Response.Filter = new GZipStream(prevUncompressedStream, CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "gzip");
    }       
    else if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
    {
        // deflate
        app.Response.Filter = new DeflateStream(prevUncompressedStream, CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "deflate");
    }       

如果你做了这个,那么压缩是由asp.net而不是IIS完成的。然后,iis检测到文件已全部准备好压缩并且未再次压缩。有时我看到此检测失败并且页面根本不显示,因此在这种情况下,您将停用iis压缩。

这是asp.net中的gZipStream类 http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

因此,如果设置了DeflateStream的GZipStream,asp.net工作进程就会进行压缩

以下是asp.net使用GZipStream进行文件压缩的​​示例 http://www.dotnetperls.com/gzipstream

我更喜欢在asp.net上进行压缩,而不是在iis上进行压缩,因为我对它有更多的控制权。