Asp.net
GZIP 與 DEFLATE 壓縮相比有什麼優勢?
我在 asp.NET 4 (C#) 中有一個網站。
我正在嘗試找到一種方法來更好地優化我的網站的頻寬。
我讀過很多文章說 DEFLATE 比 GZIP 更快更小,因為 GZIP(基於 DEFLATE)添加了一些額外的數據。
檢查 bing.com 和 google.com 的標頭似乎它們都發送 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 更可靠,因為它是 deflate 加上一些標頭和校驗和。換句話說,gzip 是放氣的,還有額外的標頭和校驗和。Deflate 使用 adler32 檢查,它也是 gzip 的一部分。因為 gzip 有效負載是 DEFLATE 壓縮的有效負載。
gzip 文件/流包含:
- 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