我在 asp.NET 4 (C#) 中有一个网站。
我正在努力寻找一种方法来更好地优化我网站的带宽。
我读过很多文章说 DEFLATE 比 GZIP 更快更小,因为 GZIP(基于 DEFLATE)添加了一些额外的数据。
检查 bing.com 和 google.com 的 header ,它们似乎都发送 GZIP 编码的数据。
假设我读到的是真实的,那么在这种情况下我会错过 GZIP 的优势。所以我怀疑应该有充分的理由更喜欢 GZIP 而不是 DEFLATE。
我的问题:
- GZIP 是否比我不知道的 DEFLATE 有任何优势?
- 知道为什么主要搜索引擎使用 GZIP 吗?
这是我用来发送 DEFLATE 的代码(来自 Global.asax):
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
string acceptEncoding = app.Request.Headers["Accept-Encoding"];
Stream prevUncompressedStream = app.Response.Filter;
if (!(app.Context.CurrentHandler is Page ||
app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
app.Request["HTTP_X_MICROSOFTAJAX"] != null)
return;
if (acceptEncoding == null || acceptEncoding.Length == 0)
return;
acceptEncoding = acceptEncoding.ToLower();
if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
{
// defalte
app.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
else if (acceptEncoding.Contains("gzip"))
{
// gzip
app.Response.Filter = new GZipStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "gzip");
}
}
最佳答案
Gzip 更可靠,因为它压缩后加上一些 header 和校验和。换句话说,gzip 是放气的,还有额外的 header 和校验和。 Deflate 是用 adler32 检查的,它也是 gzip 的一部分。因为 gzip 有效负载是 DEFLATE 压缩的有效负载。
a gzip file/stream contains:
- a 10-byte header, containing a magic number, a version number and a time stamp - optional extra headers, such as the original file name, - a body, containing a DEFLATE-compressed payload - an 8-byte footer, containing a CRC-32 checksum and the length of the original uncompressed data
关于asp.net - GZIP 与 DEFLATE 压缩相比有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243705/