Risparmiare banda con il modulo Deflate di Apache

12 dicembre 2006

Nel 1999 viene stilato l'RFC 2616 contenente le specifiche per il protocollo HTTP 1.1 che introduce un gran numero di novità rispetto al predecessore. Tra queste anche la possibilità di trasferire i contenuti tra il server e il client attraverso un sistema di encoding. Questa possibilità è sfruttata fin dalla versione 1.3 di Apache tramite il mod_gzip e oggi per mezzo del mod_deflate.

Questi moduli agiscono in una maniera concettualmente molto semplice: se il client (browser) si dichiara capace di accettare contenuti compressi in Gzip, il server comprime il file da restituire al client e lo trasferisce in questo formato. Il client poi, prima di mostrarlo, lo decomprimerà ottenendo così il file originale.

L’idea di fondo è semplice e geniale allo stesso tempo: dato che i Pc moderni possiedono grandi capacità di calcolo e che la banda è una risorsa molto preziosa, si sacrifica una piccola porzione delle risorse di sistema (in genere i documenti passati tramite Gzip tra server e client non superano i 100Kb) per ottenere un risparmio di banda considerevole (fino all’80% con documenti di tipo testuale).

Perché questo sistema funzioni è necessario che sia il browser sia il server siano compatibili con il tipo di compressione: il mod_deflate conferisce questa funzionalità ad Apache. Per quanto riguarda i browser invece praticamente tutti quelli moderni (da IE 4 e Netscape 3) sono in grado di gestirli (alcuni browser moderni presentano però dei bug che vedremo in seguito).

Da notare infine che il mod_deflate non può fare miracoli: un contenuto già compresso come un’immagine in formato Jpeg o Gif o un video Mpeg non può essere compresso ulteriormente e la loro (ri)compressione può generare dei problemi ai browser riceventi.

Infine è necessario specificare che lo stesso effetto si può ottenere con i singoli linguaggi di programmazione capaci di interfacciarsi con le librerie Gzip: ad esempio per il PHP esistono specifiche soluzioni da applicare quando non si possa mettere mano direttamente alla configurazione di Apache o quando si voglia avere certezza del risultato su ogni sistema.

Come attivarlo

Ipotizzando di avere già il modulo compilato in maniera statica o in maniera dinamica l’attivazione consiste nell’indicare il mod_deflate come filtro di output tramite cui transiteranno i vari contenuti inviati dal server:

SetOutputFilter DEFLATE

In questo caso sarà necessario specificare espressamente i tipi di file da non comprimere complicando un po’ le cose. Per questo preferisco specificare espressamente i tipi di file su cui attivare il mod_deflate tramite questo tipo di configurazione:

# AddOutputFilterByType DEFLATE mime type
AddOutputFilterByType   DEFLATE text/html
AddOutputFilterByType   DEFLATE text/plain text/xml

Nel caso in cui vogliate attivare la compressione per tutti i tipi di file esclusi alcuni da specificare (situazione che sconsiglio) è possibile inibire il mod_deflate nel seguente modo:

SetEnvIfNoCase Request_URI (gif|jpe?g|png|pdf)$ no-gzip

È possibile inoltre attivare la registrazione nei file di log di specifici parametri legati al mod_deflate tramite la configurazione di Apache. Possiamo infatti registrare il peso in byte che avrebbe avuto il file non compresso, il peso dello stesso compresso e il tasso di compressione applicata sul file (valore più basso corrisponde a compressione maggiore).

Si può accedere ai tre valori dopo averli resi disponibili tramite la direttiva DeflateFilterNote rispettivamente nel seguente modo:

DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

A questo punto instream, outstream e ratio saranno le variabili contenenti i nostri dati e le potremo utilizzare tramite i file di log personalizzati in questo modo:

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog deflate_log_file deflate
Se vuoi aggiornamenti su Risparmiare banda con il modulo Deflate di Apache inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Risparmiare banda con il modulo Deflate di Apache

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy