我正在查看此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
压缩响应。这是对的吗?
答案 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才会发送内容。