如果浏览器可以显示deflate的Accept-Encoding,它是否可以处理.NET gzipped响应?

时间:2011-05-17 11:52:01

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

我正在查看此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压缩响应。这是对的吗?

3 个答案:

答案 0 :(得分:3)

这是两种不同的算法:

这里有一些代码:

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

答案 1 :(得分:3)

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

但是,如果接受标头包含“gzip”而GZipStream包含“deflate”,则只需使用DeflateStream即可轻松修复此问题。

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

答案 2 :(得分:0)

通常,大多数浏览器都了解GZip和Deflate。它们通过在请求标头中将其指定为Accept-Encoding:gzip, deflate来告诉服务器。 HTTPCombiner优先考虑GZip。如果两种类型都存在,那么GZip将被赋予偏好。仅当浏览器仅请求Defalte时,HttpCombiner才会发送内容。