11
GZIP compression
Postato da regole-seo, in Approfondimenti SEO, in data 11/04/2010
Vai all’ indice degli articoli » Velocità e SEO
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
L’immagine precedente descrive ciò che generalmente avviene quando invochiamo un url come ad esempio http://www.mioSito.it/index.html
- Browser: invia una richiesta al server per la pagina, http://www.mioSito.it/index.html
- Server: riceve la richiesta e cerca la pagina da fornire
- Server: trova la pagina e invia con un response code 200 (OK) il file trovato, supponiamo di 100KB
- 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.
Ecco cosa avviene nel dettaglio:
- Browser: invia una richiesta al server per la pagina, http://www.mioSito.it/index.html specificando al server che supporta la gzip compression
- Server: Riceve la richiesta e cerca la pagina da fornire
- 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.
- 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:
- 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 - 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: gzipNOTA: 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



interessante, è un sistema di compressione lossless o lossy?
Assolutamente lossless, ci mancherebbe.
Non l’ho specificato perchè pensavo fosse scontato
Attivando la compressione gzip su server apache con il codice scritto sopra l’antivirus Avast mi blocca l’accesso
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.
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?
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.
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
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
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