mod_deflate Komprimierung von Dokumenten vor der Übertragung zum Client Erweiterung deflate_module mod_deflate.c

Mit dem DEFLATE-Filter des mod_deflate-Moduls können die vom Server über das Netzwerk an den Client zu sendenden Daten komprimiert werden.

Filter
Die Komprimierung aktivieren
Ausgabekomprimierung

Die Komprimierung wird vom DEFLATE- Filter implementiert. Die folgende Direktive aktiviert die Komprimierung für Dokumente in dem Container, in dem sie platziert wird:

SetOutputFilter DEFLATE

Einige Browser können mit der Komprimierung sämtlicher Inhaltstypen nicht umgehen, so dass die 'Note' gzip-only-text/html auf den Wert 1 gesetzt werden sollte, damit HTML-Dateien komprimiert werden (siehe unten). Jede Einstellung außer 1 wird ignoriert.

Soll die Komprimierung bestimmterMIME-Typen generell unterbunden werden, kann hierfür die AddOutputFilterByType-Direktive benutzt werden. Im nächsten Beispiel wird die Komprimierung nur für die HTML-Dateien der Apache-Dokumentation aktiviert:

<Directory "/your-server-root/manual">
AddOutputFilterByType DEFLATE text/html
</Directory>

Für Browser, die die Probleme mit der Komprimierung sämtlicher Dateitypen haben, sollten Sie die Direktive BrowserMatch verwenden, damit keine Komprimierung durchgeführt wird. no-gzip und gzip-only-text/html können kombiniert werden, um bessere Ergebnisse zu erzielen. In diesem Fall wird die erste Anweisung von der letzten überschrieben. Betrachten Sie folgenden Auszug aus dem oben angeführten Konfigurationsbeispiel:

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Zuerst wird der User-Agent-String daraufhin untersucht, ob er einen Netscape Browser der Version 4.x anzuzeigen scheint. Diese Versionen können nur mit der Komprimierung von text/html-Typen umgehen. Die Versionen 4.06, 4.07 und 4.08 haben sogar Probleme mit der Dekomprimierung von HTML-Dateien. Deshalb wird der DEFLATE-Filter für diese Versionen vollständig deaktiviert.

Die dritte BrowserMatch- Direktive behebt das Problem der falsch geratenen Identität des User-Agenten, denn der Microsoft Internet Explorer weist sich selbst als "Mozilla/4" aus, ist aber sehr wohl in der Lage, mit komprimierten Daten umzugehen, falls er selbst solche Daten angefordert hat. Daher wird ein Vergleich mit der zusätzlichen Zeichenfolge "MSIE" (\b bedeutet "Wortgrenze") im User-Agent-Header vorgenommen und die zuvor festgelegten Einschränkungen werden aufgehoben.

Hinweis Der DEFLATE-Filter wird immer nach RESSOURCE-Filtern wie PHP oder SSI eingefügt. Er behandelt niemals interne Subanfragen.
Eingabedekomprimierung

Das Modul mod_deflate stellt auch einen Dekomprimierungsfilter für den gzip-komprimierten Body einer HTTP-Anfrage bereit. Er wird durch Einfügen des DEFLATE-Filters mit SetInputFilter oder AddInputFilter in die Eingabefilterkette aktiviert. Zum Beispiel:

<Location /dav-area>
SetInputFilter DEFLATE
</Location>

Enthält eine Anfrage einen Content-Encoding: gzip-Header, dann wird der Body jetzt automatisch dekomprimiert. Allerdings können nur wenige Browser diese Möglichkeit nutzen. Einige besondere Anwendungen unterstützen jedoch die Anfragekomprimierung, wie zum Beispiel einige WebDAV-Clients.

Hinweis zu Content-Length

Vertrauen Sie nicht dem Inhalt des Content-Lenght-Headers, wenn Sie den Body der Anfrage selbst auswerten>. Dieser Header gibt die Länge der vom Client eingehenden Daten und nicht die Anzahl der Bytes des dekomprimierten Datenstroms an.

Proxy-Server

Das Modul mod_deflate sendet einen HTTP-Antwort-Header Vary: Accept-Encoding, um Proxies darauf hinzuweisen, dass eine zwischengespeicherte Antwort nur an Clients gesendet werden soll, die einen entsprechenden Accept-Encoding-Anfrage-Header schicken. Dadurch wird verhindert, dass komprimierte Inhalte einem Client übermittelt werden, der diese nicht interpretieren kann.

Wenn Sie spezielle Ausschlussbedingungen verwenden, wie zum Beispiel den User-Agent-Header, dann müssen Sie eine Ergänzung zum Vary-Header manuell hinzufügen, um den Proxies die zusätzlichen Einschränkungen mitzuteilen. Eine Konfiguration, in der das Hinzufügen des DEFLATE-Filters vom User-Agent abhängt, sollte wie folgt ergänzt werden:

Header append Vary User-Agent

Hängt die Entscheidung für die Komprimierung von anderen Informationen als denen aus den Anfrage-Headern ab (z.B. von der HTTP-Version), dann muss der Vary-Header auf den Wert * gesetzt werden. Dies verhindert vollständig die Zwischenspeicherung durch die entsprechenden Proxies.

Beispiel Header set Vary *
DeflateFilterNote Der Komprimierungskoeffizient wird zum Zweck der Protokollierung in einer 'Note' hinterlegt.. DeflateFilterNote [Typ] Note-Name server configvirtual host Typ steht seit Version 2.0.45 zur Verfügung.

Die DeflateFilterNote-Direktive gibt an, dass eine sogenannte Note mit der Komprimierungsrate an die Anfrage angehängt werden soll. Der Name der Note entspricht dem für die Direktive angegebenen Wert. Diese Note kann für statistische Zwecke benutzt werden, indem der Wert dem access log hinzugefügt wird.

Beispiel DeflateFilterNote ratio

LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
CustomLog logs/deflate_log deflate

Sollen exaktere Werte aus den Protokollen entnommen werden, kann mit dem Typ-Argument der Datentyp für die zu protokollierende Note angegeben werden. Als Typ kann angegeben werden:

Input
In der Note wird die Anzahl der Bytes des Eingabestroms des Filters gespeichert.
Output
In der Note wird die Anzahl der Bytes des Ausgabestroms des Filters gespeichert.
Ratio
In der Note wird der Komprimierungsquotient (output/input * 100) gespeichert. Dies entspricht der Voreinstellung, wenn das Typ-Argument weggelassen wird.

Ein Beispiel:

Korrekte Protokollierung DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate
mod_log_config
DeflateBufferSize Die von zlib auf einmal zu komprimierende Fragmentgröße DeflateBufferSize Wert DeflateBufferSize 8096 server configvirtual host

Die DeflateBufferSize-Direktive gibt die Größe des von zlib in einem Durchgang zu komprimierenden Fragments in Byte an.

DeflateWindowSize Fenstergröße für die zlib-Komprimierung DeflateWindowSize Wert DeflateWindowSize 15 server configvirtual host

Die DeflateWindowSize-Direktive gibt die Fenstergröße für die zlib-Komprimierung an (ein Wert zwischen 1 und 15). Generell gilt: Je größer der Wert, desto höhere Komprimierungsraten dürfen erwartet werden.

DeflateMemLevel Wieviel Speicher für die Komprimierung verwendet wird DeflateMemLevel Wert DeflateMemLevel 9 server configvirtual host

Die DeflateMemLevel-Direktive gibt an, wieviel Speicher zlib für die Komprimierung benutzt (ein Wert zwischen 1 und 9).

DeflateCompressionLevel Der Komprimierungslevel DeflateCompressionLevel Wert Voreinstellung der Zlib-Bibliothek server configvirtual host Diese Direktive steht seit Apache 2.0.45 zur Verfügung

Die DeflateCompressionLevel-Direktive gibt den Komprimierungslevel an. Umso höher der Wert ist, desto besser ist die Komprimierung. Gleichzeitig erhöht sich damit der Bedarf an CPU-Zeit.

Der Wert muss zwischen 1 (geringere Komprimierung) und 9 (stärkere Komprimierung) liegen.