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).
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 [...]

Leggi tutto l'articolo