2011-08-30 19 views
16

Ho un sito Web in asp.NET 4 (C#).Qual è il vantaggio della compressione GZIP vs DEFLATE?

Sto cercando di trovare un modo per ottimizzare meglio la larghezza di banda per il mio sito web.

Ho letto molti articoli dicendo che DEFLATE è più veloce e più piccolo di GZIP perché GZIP (basato su DEFLATE) aggiunge alcuni dati aggiuntivi.

Controllare le intestazioni di bing.com e google.com sembra che entrambi inviino dati codificati GZIP.

Supponendo che quello che ho letto sia vero, mi manca il vantaggio di GZIP in questo caso. Quindi sospetto che ci dovrebbe essere una buona ragione per preferire GZIP a DEFLATE.

Le mie domande:

  • fa GZIP offrono alcun vantaggio rispetto DEFLATE io non sono a conoscenza?
  • Qualsiasi indizio del perché i principali motori di ricerca utilizzano GZIP?

Ecco il codice che sto utilizzando per inviare DEFLATE (da 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

Vedi http://stackoverflow.com/questions/388595/why-use-deflate- invece-di-gzip-per-file di testo-servito da apache –

+0

Grazie Paul per la tua revisione. – GibboK

+0

Tutte le risposte sono errate/incomplete, eccetto questo: http://stackoverflow.com/a/9856879/632951 – Pacerier

risposta

19

Gzip è il più affidabile, perché è sgonfiare più un paio di intestazioni e una somma di controllo. In altre parole gzip è deflate, e intestazioni extra e checksum. Deflate è controllato con adler32, anch'esso parte di gzip. Perché il carico utile gzip è un payload compresso DEFLATE.

Deflate info

Gzip info

un file gzip/flusso contiene:

- 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

Per riassumere ... intendi che GZIP è più compatibile con il browser? – GibboK

+2

GZip abiliterà il browser alla ricerca di errori, lo sgonfiamento non sarà – Peter

+3

@peer Questo è sbagliato, deflate controllerà gli errori usando adler32. – Pacerier

Problemi correlati