Archivi tag: mod_deflate

curl: verificare se un server Web supporta la compressione HTTP

Premessa

La compressione HTTP consente di risparmiare un grosso quantitativo di banda, poichè sfrutta alcuni algoritmi di compressione per ridurre le dimensioni delle URI richieste dai client. Successivamente, sarà compito del client decomprimere il contenuto delle suddette richieste durante la fase di rendering.

Logica di funzionamento

Ma vediamo come funziona la compressione HTTP. Per prima cosa, è bene specificare che esistono N tipologie di compressione (la lista viene mantenuta da IANA), ma le prime ad essere state utilizzate sono due, ovvero:

1) gzip (GNU zip);

2) deflate (basato su Zlib – da non confondere con l’algoritimo di compressione lossless specificato nell’RFC 1951).

curl, header, http compression, gzip, deflate, mod_deflate

Quando un client invia una richiesta al server, se intende utilizzare una determinata tipologia di compressione, utilizzerà un header contenente il campo Accept-Encoding opportunamente popolato.

Ad esempio, con:

Accept-Encoding: gzip, deflate

il client sta chiedendo al server di rispondergli con delle URI compresse mediante l’algoritmo gzip o, in alternativa, deflate. Se il server supporta uno dei suddetti metodi di compressione, invierà al client una risposta contenente (sempre nell’header) il seguente campo:

Content-Encoding: gzip

oppure

Content-Encoding: deflate

Detto ciò, possiamo fare alcune prove utilizzando uno strumento potentissimo, ovvero curl. Esso ci consente di forgiare delle richieste HTTP direttamente da linea di comando. Nella fattispecie, le flag che utilizzeremo saranno -I (la quale prende in considerazione solo l’header relativo alla risposta del server) e H (che ci consente di specificare a piacimento un determinato campo dell’header da inviare al server).

Ecco un esempio:

nightfly@nightbox:~$ curl -I -H 'Accept-Encoding: gzip,deflate' http://www.ciao.it

In questo modo abbiamo inserito nell’header della richiesta il campo Accept-Encoding: gzip,deflate. Della successiva risposta che ci verrà pervenuta, prenderemo in considerazione solo l’header, che potrà avere un formato simile al seguente:

Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.3.3
Cache-Control: public, max-age=600
Expires: Sun, 11 Mar 1984 12:00:00 GMT
Vary: Cookie,Accept-Encoding
ETag: "1350751220"
Last-Modified: Sat, 20 Oct 2012 16:40:20 GMT
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Content-Length: 6035
Date: Sat, 20 Oct 2012 16:40:21 GMT
Age: 0

Nel caso in cui non sia presente il campo Content-Encoding, è probabile che il server Web contattato non supporta il tipo di compressione richiesto dal client (oppure non supporta nessun tipo di compressione).

Se il server Web è Apache, il modulo che si occupa della compressione è mod_deflate (potete controllare che esso sia effettivamente attivo mediante il comando apachectl -t -D DUMP_MODULES).

Alla prossima.