Was ist gzip? – Das Komprimierungs-Tool im Blickpunkt

Das Datenkompressions-Tool gzip entstammt der Feder der Programmierer Jean-Loup Gailly und Mark Adler, die es sich zur Aufgabe gemacht hatten, eine leistungsstarke Alternative zu dem für Unix geschriebenen Programm compress zu entwickeln. Dessen Funktion und Verhalten sind im POSIX-Standard definiert, der seinerseits die Komprimierung von Dateien mithilfe des adaptiven Lempel-Ziv-Algorithmus vorsieht. Dieser Algorithmus sowie seine Erweiterung durch Terry Welch wurden jedoch viele Jahre lang (bis 2003) durch amerikanische Patente geschützt, was ein entscheidender Beweggrund für die Arbeiten an einem adäquaten Ersatz war. Ferner lag der Fokus darauf, die gzip-Kompression deutlich effizienter zu gestalten als dies bei dem Unix-Werkzeug der Fall war – mit Erfolg.

Wie funktioniert gzip?

gzip – im Übrigen eine Kurzform für „GNU zip“ – basiert auf dem frei nutzbaren Deflate-Algorithmus, der eine Variation des Datenkompressions-Verfahrens LZ77 (Lempel-Ziv 77) ist, sowie auf der Huffman-Kodierung. Mithilfe dieser Techniken scannt gzip Dateien auf doppelte Daten-Strings (Zeichenketten). Stößt das Programm auf solche wiederkehrenden Sequenzen, ersetzt es diese durch einen Verweis auf den zuerst auftauchenden String, wobei die Länge einer solchen Sequenz üblicherweise auf 32.000 Bytes beschränkt ist. Taucht eine Zeichenabfolge also nicht in den vorangegangenen 32.000 Bytes auf, wird sie ohne Komprimierung in der gzip-Datei, die die Endung .gz erhält, gespeichert. Das Verfahren ist auf einzelne Dateien beschränkt, weshalb man zusätzlich das Packprogramm tar benötigt, um sogenannte Tarball-Archive mit den Endungen .tar.gz oder .tgz zu erstellen.

Tipp

Standardmäßig wird die Ausgangsdatei im Anschluss an die gzip-Komprimierung gelöscht. Per optionaler Parameterangabe (-k) können Sie diese automatische Funktion jedoch deaktivieren.

Um komprimierte Pakete wieder zu entpacken, kann man entweder auf die Anwendung gunzip oder aber auf den entsprechende gzip-Command zurückgreifen. Die Eigenschaften und Struktur des gzip-Formats, in das Dateien bei der Kompression umgewandelt werden, sind in den 1996 veröffentlichten RFC-Spezifikationen 1951 und 1952 definiert. Dazu zählen z. B. ein 10 Byte langer Header mit Versionsnummer und Zeitstempel, optionale Zusatz-Header, die beispielsweise den Originalnamen der Ausgangsdatei speichern, sowie eine 8 Byte große Fußzeile, die u. a. eine Prüfsumme zur Fehlererkennung enthält.  

Wo kommt das Komprimierungs-Tool zum Einsatz?

gzip ist ursprünglich für die unixoide Plattform GNU entwickelt worden, heute aber nahezu plattformübergreifend nutzbar, solange die für das Projekt ausgewählte GPL-Lizenz beachtet wird. Auf Linux-Systemen ist das Komprimierungswerkzeug beispielsweise für gewöhnlich automatisch installiert oder alternativ installationsbereit in der Paketverwaltung enthalten. Neben diversen Ausgaben für ältere Betriebssysteme existieren auf der offiziellen Homepage auch Versionen für macOS und Windows. Hinzu kommen der Fakt, dass Webserver-Anwendungen wie Apache die gzip-Kompression seit Jahren beherrschen – auch wenn die Funktion nicht immer genutzt wird – sowie die Fähigkeit moderner Browser, die komprimierten Dateien interpretieren und während des Webseiten-Renderings entpacken zu können.

In der Webentwicklung kann gzip seine Stärken also komplett ausspielen: Ist das Verfahren aktiviert, initiiert der Webserver automatisch die Komprimierung von im Webspace hochgeladenen sowie von dynamisch erzeugten Website-Elementen. Auf diese Weise kann die Ladezeit der Website für die Besucher so erheblich verringert werden. Da die Nutzer nämlich nur die komprimierten Datenpakete laden müssen, werden die Seiten in der Konsequenz auch wesentlich schneller aufgebaut. Die Dekompression übernimmt der Browser währenddessen im Hintergrund, ohne zusätzliche Bandbreite zu beanspruchen. Insbesondere Nutzer mobiler Geräte profitieren von diesem Performance-Boost, der indirekt auch das Suchmaschinen-Ranking positiv beeinflusst.

gzip: Syntax und Befehlsübersicht

Auch wenn es grafische Oberflächen für die verschiedenen Plattformen gibt, ist die Bedienung von gzip über das Terminal bzw. die Eingabeaufforderung natürlich ohne weiteres möglich. Auch für Neulinge stellt dies keine große Herausforderung dar, da gzip als klassisches Kommandozeilen-Tool für diese Nutzungsweise optimiert ist. Die allgemeine Syntax hat dabei folgende Form:

gzip Optionen Datei(en)

Die Angabe von Optionen ist dabei keineswegs verpflichtend. Bleibt das Feld leer, greift gzip einfach auf die Standardeinstellungen zurück. So genügt beispielsweise der einfache Befehl

gzip beispiel.txt

um eine komprimierte Version der Textdatei beispiel.txt zu erstellen. Um Dateien später zu entpacken oder spezielle Anweisungen zum Komprimierungsgrad, zum Ablageort oder dem Umgang mit der Originaldatei zu geben, benötigen die Kommandos aber in jedem Fall die passenden Spezifikationen. Die folgende Tabelle gibt einen Überblick über die wichtigsten gzip-Commands:

Option Beschreibung
-1 … -9 Definiert den Komprimierungsgrad (1–9), wobei der Wert 1 für die schwächste und am schnellsten durchgeführte Komprimierung und der Wert 9 für die beste, am langsamsten durchgeführte Komprimierung steht; voreingestellter Wert ist 5
-r Durchsucht rekursiv das Verzeichnis (also inklusive aller Unterverzeichnisse) und komprimiert bzw. dekomprimiert alle enthaltenen Dateien
-f Forciert die gzip-Komprimierung und überschreibt notfalls bereits vorhandene Dateien mit demselben Dateinamen
-d Entpackt die ausgewählte Datei in das aktuelle Verzeichnis
-k Verhindert die Löschung der Originaldatei
-l Spielt Informationen wie z. B. die Kompressionsrate einer verpackten Datei aus
-c Gibt die komprimierte Datei in der Standardausgabe aus; für gewöhnlich der Bildschirm, der mit der Kommandozeile verbunden ist
-q Deaktiviert sämtliche gzip-Meldungen
-t Testet die Integrität der verpackten Datei
-h Listet alle verfügbaren Optionen auf

So nutzen Sie die gzip-Kompression für Ihr Apache-Webprojekt

Webserver bieten das praktische Komprimierungsverfahren in der Regel in Form eines Moduls an, das folgerichtig auch aktiviert sein muss. Heutzutage geben viele Webhosting-Anbieter die Funktion in der Regel standardmäßig frei, während dies in der Vergangenheit nicht immer der Fall war. Hintergrund war wohl in erster Linie, dass der Kompressionsprozess zusätzliche Prozessorleistung einfordert. Wenn Sie sich unsicher sind, ob gzip durch Ihren Hoster zugelassen wird, können Sie diesen entweder direkt kontaktieren oder alternativ eine manuelle Abfrage in die Wege leiten. Bei einem Apache-Webserver überprüfen Sie die Modul-Einstellungen beispielsweise mithilfe einer einfachen phpinfo()-Ausgabe. Der Eintrag HTTP_ACCEPT_ENCODING verrät Ihnen, welche bzw. ob eine Komprimierungsmethode ausgewählt ist.

Ist gzip verfügbar, haben Sie verschiedene Möglichkeiten, den Komprimierungshelfer für Ihre Zwecke zu nutzen.

gzip-Komprimierung in der .htaccess-Datei aktivieren

Über eine .htaccess-Datei können Sie verzeichnisspezifische Einstellungen vornehmen (diese gelten für das aktuelle und alle untergeordneten Verzeichnisse) und so Ihren Webserver in Echtzeit konfigurieren. Das wird dadurch möglich, dass die Konfigurationsdatei, die typischerweise im Root-Verzeichnis zu finden ist, bei jedem Request, der den Server erreicht, automatisch ausgelesen wird. Bei einigen Webhosting-Anbietern ist die .htaccess-Datei allerdings in einem anderen Ordner hinterlegt, versteckt oder gar für den Zugriff gesperrt. In diesem Fall bleibt Ihnen nur die Option, den Hoster zu kontaktieren und die Freigabe zu erbitten. Können Sie die Konfigurationen vornehmen, schalten Sie die gzip-Kompression (mod_gzip) oder das Modul für den Deflate-Algorithmus (mod_deflate) ein, indem Sie der .htaccess-Datei folgenden Code hinzufügen:

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

<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
</IfModule>
Tipp

Auch für die beiden Module mod_gzip und mod_deflate benötigen Sie die Freigabe durch Ihren Webhoster.

gzip-Kompression via PHP einschalten

Es ist möglich, das Komprimierungsverfahren mithilfe eines einfachen PHP-Eintrags zu aktivieren. Der Haken an der Sache: Der Code muss für jedes PHP-Dokument einzeln eingetragen werden. Sie sollten also nur auf diese Option zurückgreifen, wenn Sie nicht über die erforderlichen Berechtigungen verfügen, um die .htaccess-Datei bearbeiten zu können. Die Codezeile, die Sie an den Anfang der jeweiligen Datei setzen müssen, lautet folgendermaßen:

<?php
ob_start("ob_gzhandler");
?>

gzip per CMS-Plug-in implementieren

Neben den beiden vorgestellten manuellen Lösungen existiert auch eine Variante, die von Ihnen nur einen minimalen Einrichtungsaufwand erfordert: Die Aktivierung der gzip-Komprimierung durch ein Plug-in für das von Ihnen genutzte Content-Management-System. Solche nützlichen Erweiterungen, die Sie innerhalb weniger Minuten einbinden und gemäß Ihren Wünschen anpassen, finden Sie in erster Linie für CMS wie WordPress, die auf PHP basieren. Die folgende Auflistung enthält drei der beliebtesten Plug-ins für die Weblog-Software:

  • W3 Total Cache: Das WordPress-Plug-in W3 Total Cache verspricht eine bis zu zehnfache Verbesserung der Website-Performance. Neben diversen Caching-Mechanismen und speziellem Mobile-Support enthält die SEO- und Usability-Suite auch Optionen, um die gzip-Komprimierung zu aktivieren.
  • Check and Enable GZIP compression: Mit dieser Erweiterung, die ebenfalls für das CMS WordPress entwickelt wurde, können Sie überprüfen, ob die gzip-Kompression für Ihr Projekt freigeschaltet ist. Zu diesem Zweck greift das Plug-in auf den Onlineservice checkgzipcompression.com zurück. Ist die Komprimierung ausgeschaltet, unterstützt das Plug-in Sie bei der Einrichtung.
  • WP Performance Score Booster: Über 150.000 Downloads und 30.000 aktive Installationen kann die Erweiterung WP Performance Score Booster bereits für sich verzeichnen. Mithilfe des Plug-ins aktivieren Sie gzip problemlos und komprimieren in der Folge effektiv die Inhalte Ihres Webprojekts wie Texte, HTML, JavaScript, CSS, XML und Co.

Bei anderen Systemen wie Joomla sind Sie nicht einmal auf den Einsatz einer Erweiterung angewiesen. Hier zählen Funktionen zur Einschaltung der Komprimierungstechnik bereits zum Standardumfang.

So aktivieren Sie gzip auf Ihrem NGINX-Webserver

Wenn Sie Ihre Website-Inhalte mithilfe eines NGINX-Webservers ausliefern, haben Sie ebenfalls die Möglichkeit, das gzip-Verfahren einzusetzen, um die Ladezeit Ihres Projekts zu verbessern. Hierfür müssen Sie einzig das Modul ngx_http_gzip_module entsprechend konfigurieren. Standardmäßig ist die Direktive „gzip“, über die Sie den Komprimierungsdienst aktivieren bzw. deaktivieren, ausgeschaltet. Um diese Einstellung zu ändern, öffnen Sie die nginx.conf und suchen dort die „gzip“-Direktive. Anschließend ergänzen Sie einfach den Eintrag „gzip off“ durch „gzip on“. Der folgenden Tabelle können Sie die Bedeutung und Möglichkeiten einiger weiterer Direktiven zur Konfiguration der NGINX-gzip-Komprimierung entnehmen:

Direktive Syntax Standardeinstellung Beschreibung
gzip_buffers gzip_buffers Anzahl Größe; gzip_buffers 32 4k16 8k; Definiert die Pufferanzahl und -größe für den Komprimierungsprozess
gzip_comp_level gzip_comp_level Komprimierungsgrad; gzip_comp_level 1; Gibt den Komprimierungsgrad an; mögliche Werte: 1–9
gzip_min_length gzip_min_length Mindestlänge; gzip_min_length 20; Gibt die Mindestlänge einer verpackten Datei in Bytes an
gzip_http_version gzip_http_version Versionsnummer; gzip_http_version 1.1; Legt fest, ab welcher HTTP-Version eine Anfrage mit einer komprimierten Antwort beantwortet wird
gzip_types gzip_types Content-Typ; gzip_types text/html; Regelt, für welche Content-Typen die Komprimierung gelten soll (ebenfalls möglich: CSS, JSON, XML, …)

So können Sie die Komprimierung testen

Wenn Sie die gzip-Kompression für Ihre Webpräsenz konfiguriert haben, können Sie sich mithilfe verschiedener Onlinetools davon überzeugen, dass das Verfahren wie gewünscht funktioniert und Ihr Webserver bei entsprechenden Anfragen komprimierte Inhalte ausliefert. Allen voran ist hierbei die Google-Anwendung PageSpeed Insights zu empfehlen. Nach Eingabe einer beliebigen Seite Ihres Auftritts analysiert das Tool automatisch den Inhalt und informiert Sie anschließend über die Performance-Stärken und -Schwächen dieser Seite. Sie erhalten auf diese Weise u. a. eine Information darüber, ob die gzip-Komprimierung aktiviert ist. Einen einfachen gzip-Test können Sie alternativ mit dem HTTP Compression Test auf WhatsMyIP.org durchführen.

Tipp

Da ein einzelner Test durchaus nicht immer fehlerfrei ablaufen muss, empfiehlt es sich, den Check immer für mehrere Seiten des eigenen Webprojekts durchzuführen.