【问题标题】:Regarding httpcompression asp.net关于 httpcompression asp.net
【发布时间】:2011-12-03 19:23:24
【问题描述】:

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

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

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

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

我只需要知道谁真正comresee 响应。它是网络服务器还是 asp.net 工作进程。请详细讨论谁以及如何压缩响应。谢谢

【问题讨论】:

    标签: asp.net http-compression


    【解决方案1】:

    实际上,您在此处显示的标头并未进行压缩。进行压缩的是您在 Response.Filter 上设置的 Stream 类,并且此压缩是由 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

    因此,如果您设置 GZipStream,则 asp.net 工作进程对 DeflateStream 进行了压缩

    这里是 asp.net 使用 GZipStream 压缩文件的示例 http://www.dotnetperls.com/gzipstream

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

    【讨论】:

    • IIS 压缩更好或 asp.net 压缩更好。哪一个可以产生更多的压缩输出。
    • @user750398 gZip 是更好的默认值,但您不决定,您要求浏览器使用 acceptEncoding 值选择更喜欢的内容
    • @user750398 最好在 asp.net 上进行压缩,因为您可以完全控制,例如刷新在 asp.net 上工作,但不在 iis 上,例如,如果您赢得发送一部分你的页面,你刷新它,直到页面的其余部分准备好。此外,如果您在 asp.net 上制作,您可以选择甚至更改 gZip 压缩。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2017-04-09
    • 2011-05-24
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多