GZIP compression

Postato da regole-seo, in Approfondimenti SEO, in data 11/04/2010

Vai all’ indice degli articoli » Velocità e SEO

gzip-http-compression

La gzip compression è un buon modo per ottenere due grandi vantaggi in termini di performance di un sito web.
In primo luogo grazie alla compressione gzip si risparmia sul bandwidth (larghezza di banda) ovvero sulla quantità di byte che occorre trasportare in giro per il web affinchè il nostro sito venga visualizzato.
In secondo luogo (diretta conseguenza del primo aspetto) potremo ottenere un vantaggio anche in termini di velocità.

Mentre il vantaggio che si acquisisce in termini di larghezza di banda attivando la gzip compression è fuori discussione, il beneficio effettivo che la gzip compression porta in termini di velocità dipende comunque da diversi altri fattori quali la quantità di traffico del vostro sito, la velocità della linee, l’effettive peso dei vostri contenuti ecc.

Quello che ad oggi mi sento proprio di dire, è che la compressione gzip attivata su un sito può solo portare vantaggi, anche nel caso in cui la velocità non dovesse aumentare in modo rilevante.

Tempo fa la scelta non era così semplice infatti non tutti i vecchi browser web supportavano la gzip compression. Stiamo però parlando delle versioni ormai datate dei browser; le versioni precedenti alla 4 di Internet Explorer e Netscape e di versioni di Opera precedenti la 5.12.
Insomma credo proprio che ormai sia acqua passata.

Prima di vedere due esempi su come attivare la gzip compression su web server Apache e la gzip compression su application server Apache Tomcat e verificarne il funzionamento tramite gzip-test, vediamo meglio di cosa si tratta.

Standard http request and respons

standard-http

L’immagine precedente descrive ciò che generalmente avviene quando invochiamo un url come ad esempio http://www.mioSito.it/index.html

  1. Browser: invia una richiesta al server per la pagina, http://www.mioSito.it/index.html
  2. Server: riceve la richiesta e cerca la pagina da fornire
  3. Server: trova la pagina e invia con un response code 200 (OK) il file trovato, supponiamo di 100KB
  4. Browser: attende di scaricare i 100 KB per poi visualizzare la pagina all’utente.

Chiaramente questa operazione viene ripetuta per tutte le risorse riferite dalla pagina index.html (immagini script esterni ecc…)

In questo caso ipotetico dunque dobbiamo attendere il download di 100 KB… …decisamente troppo!

Gzip http request and respons

Con la gzip compression quello che avviene è che il server effettua una compressione del file richiesto prima di inviarlo al browser. Una volta ricevuto il file, il browser lo decomprimerà per poi visualizzarlo all’utente.

gzip-http

Ecco cosa avviene nel dettaglio:

  1. Browser: invia una richiesta al server per la pagina, http://www.mioSito.it/index.html specificando al server che supporta la gzip compression
  2. Server: Riceve la richiesta e cerca la pagina da fornire
  3. Server: Trova la pagina e invia un response code 200 (OK), comprime il file da 100 KB ottenendo un file da 25 KB e lo invia al browser.
  4. Browser: attende di scaricare i 25 KB per poi visualizzare la pagina all’utente.

Da notare che il guadagno ottenuto sulla compressione del codice della pagina può arrivare al 75%.

Come evidenziato anche nell’immagine, perché tutto ciò funzioni correttamente, il client (browser) e il server devono stabilire un accordo:

  1. Il browser deve informare il server che è in grado di supportare il contenuto compresso. Per fare ciò invia nell’header della richiesta il seguente parametro:
    Accept-Encoding: gzip, deflate
  2. Il server, nel caso il contenuto richiesto venga compresso, deve informare il browser che il contenuto che sta per inviare è compresso. Per fare ciò invia nell’header della risposta il seguente parametro:
    Content-Encoding: gzip

    NOTA: Se il server non invia tale parametro in risposta allora significa che il contenuto non è stato compresso e che quindi il browser (pur supportando contenuti comrpessi) dovrà trattarlo nel modo tradizionale.

Poiché come detto in precedenza, già da diversi anni i browser supportano la gzip comrpession, se vogliamo ottenere i vantaggi della compressione gzip tutto quello che ci resta da fare è configurare il server del nostro sito perché fornisca i contenuti compressi.

Vediamo come attivare la gzip compression su web server Apache e su application server Apache Tomcat


Apache gzip compression

Per abilitare la gzip compression su web server Apache occorre essenzialmente abilitare il modulo mod_deflate.so inserendo la seguente istruzione nel file httpd.conf situato nella cartella conf dell’installazione di Apache:

LoadModule deflate_module modules/mod_deflate.so

e aggiungere quanto segue per attivare la compressione:

#
# mod_deflate configuration
#
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
      AddOutputFilterByType DEFLATE text/plain
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/xml
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE application/xml
      AddOutputFilterByType DEFLATE application/xhtml+xml
      AddOutputFilterByType DEFLATE application/rss+xml
      AddOutputFilterByType DEFLATE application/javascript
      AddOutputFilterByType DEFLATE application/x-javascript
      DeflateCompressionLevel 9
      BrowserMatch ^Mozilla/4 gzip-only-text/html
      BrowserMatch ^Mozilla/4\.0[678] no-gzip
      BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
      DeflateFilterNote Input instream
      DeflateFilterNote Output outstream
      DeflateFilterNote Ratio ratio
      LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
</IfModule>

Per una descrizione dettagliata della configurazione vi rimando a questo articolo: how to Install and configure mod_deflate – Compress Web Content delivered by Apache e chiaramente anche alla documentazione ufficiale del modulo mod_deflate di Apache: http://httpd.apache.org/docs/2.0/mod/mod_deflate.html


Apache Tomcat gzip compression

Nel caso invece abbiate realizzato un’applicazione web Java e debba essere l’application server Tomcat a dovere operare la gzip compression, vi basterà configurare il Connector all’interno del file server.xml come nel seguente esempio:

<Connector port="8080" maxHttpHeaderSize="8192"
         maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"
         compressableMimeType="text/html,text/xml,text/css,text/javascript,text/plain"
         compression="on" compressionMinSize="2048"
         noCompressionUserAgents="gozilla, traviata"/>

A questo indirizzo trovate la documentazione ufficiale per la configurazione del Connector di Tomcat: Tomcat Http connector


GZIP test

Una volta configurato il server non ci resta che verificare se tutto funziona correttamente.
A questo indirizzo www.gidnetwork.com/tools/gzip-test.php trovate gzip-test un semplice strumento che è in grado di dirvi se la gzip compression è attiva per il vostro sito e, in tal caso, quanto è il guadagno che ne avete avuto in termini di dimensioni.

Con la gzip compression, a fronte di una perdità di velocità generalmente irrisoria derivante dal lavoro operato dal server per realizzare la compressione, otterrete sicuramente un aumento più o meno sensibile della velocità di download dei contenuti e sicuramente un grande vantaggio in termini di banda utilizzata.

Vai all’ indice degli articoli » Velocità e SEO

Commenti (11)

  1. Wpb scrive:

    interessante, è un sistema di compressione lossless o lossy?

  2. regole-seo scrive:

    Assolutamente lossless, ci mancherebbe.
    Non l’ho specificato perchè pensavo fosse scontato :)

  3. Compara prezzi scrive:

    Attivando la compressione gzip su server apache con il codice scritto sopra l’antivirus Avast mi blocca l’accesso

  4. regole-seo scrive:

    Ciao compara prezzi.
    E’ un comportamento strano.
    Forse hai attivato qualche opzione particolare di Avast?
    Non mi sembra una scelta intelligente quella di bloccare a prescindere i contenuti compressi.

  5. Compara prezzi scrive:

    No, in Avast non ho attivato nessuna opzione in particolare.

    In questo modo invece:
    —–
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css

    SetOutputFilter DEFLATE

    —–
    Avast non mi blocca… controllando però con il tool in
    http://www.gidnetwork.com/tools/gzip-test.php
    il tester dice che non è attiva la compressione…. forse il codice che ho messo non è la stessa cosa?

  6. regole-seo scrive:

    Pare si tratti di un bug di Avast che ha causato problemi a diverse persone.
    Se cerchi con Google trovi un sacco di cose.
    Vedi ad esempio qui: http://it.answers.yahoo.com/question/index?qid=20110411132110AA5JHkH
    …così dovresti risolvere.

  7. Marco scrive:

    Ciao! io ho eseguito questo metodo http://www.mamertum.it/abilitare-la-compressione-gzip-o-deflate-per-wordpress-su-aruba/ a te come sembra! Vorrei un consiglio da un esperto

  8. Marco scrive:

    ho eseguito la guida della modifica del file htacces! mi sai dire la diffferenza con il tuo codice e quali sono le differenze!
    Grazie mille

  9. regole-seo scrive:

    Ciao Marco, l’esempio che hai seguito mi sembra buono.
    Quando configuri un server é sempre meglio riferirsi alla documentazione ufficiale.
    Se vuoi capire le differenze tra i due esempi io ti consiglio di partire da qui:
    http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

  10. donald scrive:

    Ciao a tutti,
    volevo chiedere una info forse troppo tecnica. La sto cercando anche in inglese ma non riesco a trovare nulla. Da poco sono passato a spazio hosting che viene gestito con webserver Zeus. Prima usavo un altro spazio host che aveva apache e quindi con un normale plugin tipo total cache e similare abilitavo la compressione e il gioco è fatto. Il problema adesso è che questo server non consente questo sistema e quindi non riesco personalmente ad abilitare la compressione gzip nel mio sito che risulta quindi lento. Ho letto che ci sono comandi simili a Deflate ma non so dove vanno inseriti, tipo se in uno script o simile. grazie in anticipo. Donny

  11. [...] Gzip Compression, per minimizzare l’ HTML con la funzione mod deflate nel file htaccess, oppure col plugin WP-HTML-Compression. [...]

Scrivi un commento