2011-08-30 47 views
16

我有一個asp.net 4(C#)的網站。GZIP vs DEFLATE壓縮的優點是什麼?

我試圖找到一種方法來更好地爲我的網站優化帶寬。

我讀過很多文章,說GML的DEFLATE更快更小,因爲GZIP(基於DEFLATE)增加了一些額外的數據。

檢查bing.com和google.com的標題,似乎它們都發送GZIP編碼的數據。

假設我讀的是真的,我錯過了這種情況下GZIP的優勢。所以我懷疑應該有一個很好的理由來選擇GZIP來DEFLATE。

我的問題:

  • 不GZIP提供了DEFLATE任何優勢,我不知道的?
  • 任何線索爲什麼主要的搜索引擎使用GZIP?

下面是我用送放氣的密碼(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"); 
     } 
    } 
+0

參見http://stackoverflow.com/questions/388595/why-use-deflate-而不是gzip-for-text-files-served-by-apache –

+0

感謝Paul的修改。 – GibboK

+0

所有的答案都是錯誤/不完整的,除了這個:http://stackoverflow.com/a/9856879/632951 – Pacerier

回答

19

Gzip已是更可靠的,因爲它是放氣加幾頭和校驗和。換句話說,gzip是放氣的,額外的頭文件和校驗和。 Deflate用adler32進行檢查,它也是gzip的一部分。因爲gzip有效載荷是DEFLATE壓縮的有效載荷。

Deflate info

Gzip info

一個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 
+0

總結..你的意思是GZIP更多的瀏覽器兼容? – GibboK

+2

GZip將使瀏覽器檢查錯誤,放氣不會 – Peter

+3

@peer這是錯誤的,deflate會檢查使用adler32錯誤。 – Pacerier