A keresők üzemeltetőinek ajánlásában kiemelt helyen szerepel, hogy a webszerver tömörített formában (is) biztosítsa a letöltendő tartalmat. A dolog vitatható, hiszen a legtöbb webszerveren általános formátum eleve tömörített (pl. JPEG, GIF, PNG képek) , a HTML, Javascript és CSS fájlok méretei pedig nem túl jelentősek. Nyereség tehát kevés, csak a lassabb mobilos kapcsolatok profitálnak belőle egy keveset. Azért írom, hogy keveset, mert a lassabb mobilos és analóg modemes kapcsolatok eleve használnak tömörítést az adatforgalomban.
Apache webszerver és a tömörítés
Az Apache webszerveren a legtöbb esetben már alapértelmezetten rendelkezésre áll a mod_deflate modul, amely megoldást kínál a webszerverünk kimenetének tömörítésére. Az alábbi megoldás egyaránt alkalmazható statikus és dinamikus lapok esetében.
Apache webszerver esetén az Vhost konfigurációját az alábbiakkal egészítsük ki a GZIP tömörítés engedélyezéséhez.
# tömörítés engedélyzése Apache szerveren <IfModule deflate_module> SetOutputFilter DEFLATE SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html DeflateBufferSize 8096 DeflateCompressionLevel 3 </IfModule>
Egy hasznos tipp a nagy méretű, jól tömöríthető fájlokat kiszolgáló webszerverekre
A fenti módszerrel elérhetjük, hogy a webszerver minden – nem eleve tömörített – fájlt tömörítve küldjön a böngészők felé. Van azonban olyan eset, ahol ez a webszerveren már nem elfogadható mértékben növelné a terhelést. Gondolok itt bármilyen fájlformátumra, amely nem használ tömörítést, pl. nagy méretű, tömörítetlen BMP formátumok. Ezeknél komoly erőforrás-pazarlást okoz, hogy a webszerver minden egyes kliens kiszolgálásakor nekiáll tömöríteni az adott fájlt.
Egyik lehetőség, hogy ezeket eleve egy tömörített archívumban töltjük fel a szerverre. Egy másik, elegáns megoldás, ha a GZIP által tömörített és tömörítetlen formában is tároljuk a fájlokat. A böngésző felé pedig attól függően küldjük a tömörített vagy tömörítetlen formában, hogy az melyiket tudja lekezelni.
Az alábbi .htaccess fájlban is megadható beállítás ezt valósítja meg.
# Gzippelt fájlokat előnyben részesítő .htaccess fájl RemoveType .gz AddEncoding gzip .gz Header set Vary "Accept-Encoding" RewriteEngine On RewriteBase / RewriteCond %{HTTP:Accept-encoding} gzip RewriteCond %{REQUEST_FILENAME}.gz -f RewriteRule ^(.*)$ $1.gz [L]
A fenti beállítások megléte esetén, már csak fel kell töltenünk a tömörítetlen fájlok mellé a Gzippel tömörített verziót is (.gz kiterjesztéssel). Tehát, ha egy valami.bmp mellett létezik egy valami.bmp.gz is, és a böngésző képes fogadni azt, akkor a webszerverünk a tömörített verzióval fogja megörvendeztetni azt.
A tömörítést akár a szerveren is elvégezhetjük, ha van shell hozzáférésünk.
Például a következő paranccsal:
gzip -9 -k *.bmp
A „Vary: Accept-Encoding” sor elsősorban a proxyk miatt szükséges, mert enélkül a Gzipelt tartalmat olyan kliensek felé is küldené esetlegesen, amelyek a Gzippel tömörített tartalmat nem tudják feldolgozni.