Asp.net

GZIP 與 DEFLATE 壓縮相比有什麼優勢?

  • August 30, 2011

我在 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

引用自:https://stackoverflow.com/questions/7243705