【问题标题】:If a browser can shows Accept-Encoding of deflate, can it handle .NET gzipped responses?如果浏览器可以显示放气的 Accept-Encoding,它可以处理 .NET gzipped 响应吗?
【发布时间】:2011-05-17 21:00:27
【问题描述】:

我在这个HTTPCombiner看这个方法:

private bool CanGZip(HttpRequest request)
{
    string acceptEncoding = request.Headers["Accept-Encoding"];
    if (!string.IsNullOrEmpty(acceptEncoding) &&
         (acceptEncoding.Contains("gzip") || acceptEncoding.Contains("deflate")))
        return true;
    return false;
}

如果返回 true,则使用 GZipStream 压缩响应。是这样吗?

【问题讨论】:

    标签: c# .net http compression cross-browser


    【解决方案1】:

    这是两种不同的算法:

    这里有一些代码:

    所以,根据协议,这是不对的,好像浏览器说“用deflate给我内容”,你不应该把它gzip压缩回去。

    【讨论】:

      【解决方案2】:

      GZip(基于 Deflate)和 Deflate 是两种不同的算法,因此“deflate”请求绝对不应返回 gzip 压缩的内容。

      但是,这应该很容易解决,只需在接受标头包含“gzip”时使用GZipStream 并为“deflate”使用DeflateStream

      两者都包含在 System.IO.Compression 中,因此您不必编写自己的 deflate 算法或使用第三方实现。

      【讨论】:

        【解决方案3】:

        通常大多数浏览器都支持 GZip 和 Deflate。他们通过在请求标头中将其指定为Accept-Encoding:gzip, deflate 来告诉服务器。 HTTPCombiner 优先考虑 GZip。如果这两种类型都存在,则优先选择 GZip。只有浏览器请求 Defalte 时,HttpCombiner 才会发送内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-04
          • 1970-01-01
          • 2018-10-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-10
          • 2022-01-09
          相关资源
          最近更新 更多