A hint: This file contains one or more very long lines, so maybe it is better readable using the pure text view mode that shows the contents as wrapped lines within the browser window.
1 <?xml version="1.0" encoding="iso-8859-1" ?> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 5 <head> 6 <title>Mögliche Erweiterungen in künftigen Versionen von mod_gzip</title> 7 <meta name="author" content="Michael Schröpl" /> 8 <meta name="description" content="Eine Aufzählung (hoffentlich) sinnvoller und wahrscheinlich leicht realisierbarer Funktions-Erweiterungen für künftige mod_gzip-Versionen" /> 9 <meta name="keywords" content="Apache, HTTP, Kodierung, gzip, Komprimierung" /> 10 <style type="text/css"> 11 body{font-family:sans-serif;margin:0px 30px 0px 30px;} 12 h1{font-size:22px;margin-top:20px;} 13 h2{font-size:18px;margin-top:14px;} 14 small{font-size:80%;} 15 td{vertical-align:top;} 16 tt{font-weight:bold;} 17 code,tt{font-family:"Courier New",monospace;} 18 h1,h2{margin-bottom:1px;} 19 p,td{margin-top:3px;margin-bottom:3px;} 20 p,ul,ol,li{font-size:17px;line-height:22px;} 21 ul,ol,li{margin-top:0px;margin-bottom:0px;} 22 img{border-width:0;} 23 24 #nav{position:absolute;top:30px;left:0px;font-size:14px;width:170px;font-weight:bold;margin:2px 2px 2px 30px;} 25 #nav[id]{position:fixed;} 26 #nav img{margin:5px;} 27 #nav p, #nav a:hover, #nav a{display:block;padding:3px;margin:2px;width:150px;font-size:15px;line-height:18px;} 28 #content{position:absolute;left:220px;right:30px;} 29 #mail{text-align:right;} 30 #icon{width:190px;float:left;} 31 #mail,#icon{margin-top:30px;} 32 33 @media screen { 34 body{color:#000;background-color:#f8ebd9;} 35 h1{color:#666;} 36 h2{color:#840;} 37 code{color:#333;} 38 em{color:#900;} 39 tt{color:#909;} 40 h1,h2,code,em,tt{background-color:inherit;} 41 .new13192a{color:#inherit;background-color:#ffd;} 42 .new13261a{color:#inherit;background-color:#eff;} 43 .bugfix{color:#fff;background-color:#f00;font-weight:bold;padding:0px 4px;} 44 #nav a{color:#530;background-color:transparent;} 45 #nav a{text-decoration:none;} 46 #nav p, #nav a:hover{color:#000;background-color:#fff;} 47 #nav p {border:1px #660 solid;} 48 #nav a {border:1px #666 dotted;} 49 } 50 51 @media print { 52 #icon,#nav{display:none;} 53 #content{position:absolute;left:0px;right:0px;} 54 } 55 </style> 56 </head> 57 58 <body> 59 60 <div id="nav"> 61 62 <img src="mod_gzip_logo.gif" height="47" width="102" alt="mod_gzip-Logo" /> 63 64 65 <a title="mod_gzip - was ist das überhaupt?" href="index.htm">mod_gzip</a> 66 67 68 69 <a title="Komprimierung von HTTP-Inhalten durch Content-Encoding" href="encoding.htm">Content-Encoding</a> 70 71 72 73 <a title="Welche Browser können mit 'Content-Encoding: gzip' umgehen?" href="browser.htm">Browser</a> 74 75 76 77 <a title="Wie gehen Firewall mit 'Content-Encoding: gzip' um?" href="firewalls.htm">Firewalls</a> 78 79 80 81 <a title="Eine Beispiel-Konfiguration für mod_gzip" href="config.htm">Konfiguration</a> 82 83 84 85 <a title="Beschreibung sämtlicher mod_gzip-Status-Codes" href="status.htm">Status-Codes</a> 86 87 88 89 <p>Erweiterungen</p> 90 91 92 93 <a title="Zwischenspeicherung mod_gzip-komprimierter Daten durch Proxy-Server" href="cache.htm">Caching</a> 94 95 96 97 <a title="Versions-Historie und Änderungsprotokoll von mod_gzip" href="versions.htm">Versionen</a> 98 99 100 101 <a title="Andere Quellen zu mod_gzip" href="links.htm">Links</a> 102 103 104 </div> 105 106 <div id="content"> 107 108 <h1>Mögliche Erweiterungen in künftigen Versionen von <tt>mod_gzip</tt></h1> 109 110 <p>Dieses Dokument beschreibt einige mögliche Funktionserweiterungen, die sich hoffentlich mit wenig Aufwand in die derzeit aktuelle Version 1.3.26.1a von <tt>mod_gzip</tt> einbauen lassen sollten und die Verwendung dieses Moduls verbessern würden.</p> 111 112 <h2><a id="rule_logging"></a>Protokollierung von Klasse und Wert der entscheidenden Filter-Regel</h2> 113 <p>Die Entscheidung darüber, ob sich ein Dokument-Inhalt für eine Komprimierung durch <tt>mod_gzip</tt> qualifiziert, fällt letzten Endes bei der Auswertung der entsprechenden Filterregeln, welche mit Hilfe der Direktiven <code>mod_gzip_item_include</code> bzw. <code>mod_gzip_item_exclude</code> definiert und durch die Funktion <code>mod_gzip_validate1</code> geprüft wird.</p> 114 <p>Diese Funktion wird allerdings an nicht weniger als fünf Stellen im Programmquelltext aufgerufen, jeweils mit unterschiedlichen Parameter-Belegungen für bestimmte Teilmengen der zu diesem Zeitpunkt jeweils zu prüfenden Regel-Klassen. In einigen dieser Fälle ist aufgrund der eingeschränkten Parameterbelegung klar, welche Klasse von Regel zu einem bestimmten Ergebnis geführt haben muß <small>(nicht jedoch, welche Regel!)</small>, in anderen Fällen <small>(etwa bei der gleichzeitigen Prüfung aller Regeln der Klassen <code>file</code>, <code>uri</code>, <code>mime</code> und <code>handler</code>)</small> ist nicht einmal die Klasse der entscheidenden Regel klar <small>(denn <code>mod_gzip_validate1</code> liefert einen so unspezifischen Ergebniswert an den Aufrufer zurück, daß dieser nicht verstehen kann, was genau passiert ist - in einigen Fällen werden sogar interne Verarbeitungsfehler genauso dargestellt wie eine Ablehnung aufgrund einer Regel)</small>. In solchen Fällen Daher ist nicht einmal eine vernünftige Auswertung des <tt>mod_gzip</tt>-Statuscodes möglich.</p> 115 <p>Das Definieren eines sinnvollen Regelsatzes ist jedoch der wichtigste Schritt bei der gesamten <small>(und momentan noch ziemlich komplizierten)</small> <tt>mod_gzip</tt>-Konfiguration. Jede Information darüber, welche der definierten Regeln in welchen Fällen über die Komprimierung eines Dokument-Inhalts den Ausschlag gegeben hat, wäre für den Anwender in vielen Fällen hilfreich.</p> 116 <p>Andererseits unterstützt <tt>mod_gzip</tt> <em>nach</em> erfolgreicher Verarbeitung eines Dokuments bereits die Transparenz der Verarbeitung durch das Setzen einiger Variablen, welche innerhalb von Apache-Log-Formaten verwendet werden können <small>(den Verarbeitungs-Status, die Dokumentgröße vor bzw. nach der Komprimierung sowie die Volumen-Einsparung in Prozent - letztere leider fälschlicherweise <em>immer</em> aufgerundet)</small>. Analog könnte <tt>mod_gzip</tt> <small>(in dem Moment, in welchem es die Entscheidung über die Komprimierung des Dokument-Inhalts getroffen hat)</small> Klasse und Inhalt der entscheidenden Regel in zwei weiteren Protokoll-Variablen ablegen, welche innerhalb eines Log-Formats über die Namen <code>mod_gzip_rule_class</code> und <code>mod_gzip_rule_content</code> angesprochen würden.</p> 117 118 <h2><a id="gzip_level"></a>Konfigurierbare gzip-Komprimierungsstufe</h2> 119 <p>Aktuell verarbeitet <tt>mod_gzip</tt> die <code>gzip</code>-Komprimierungsstufe 6. dies ist fest eincodiert durch die Zuweisung <code>gz1->level = 6</code> in der Funktion <code>gz1_init</code>.</p> 120 <p>Je höher die Komprimierungsstufe <small>(<code>gzip</code> erlaubt normalerweise Werte zwischen 0 und 9)</small>, desto besser die Komprimierungswirkung, desto höher aber auch der Verbrauch an CPU-Zeit. Durch eine Anpassung dieser Komprimierungsstufe könnte ein Betreiber also den <i>trade-off</i> zwischen CPU-Last und Bandbreiteneinsparung nach seinen eigenen Vorstellungen auflösen. Eigene Experimente haben ergeben, daß auch Stufe 3 bereits sehr nahe an die Komprimierungswirkung von Stufe 6 heran kommt - zumindest die Wahl zwischen diesen beiden Werten sollte dem Anwender überlassen werden.</p> 121 <p>Insofern wäre es sinnvoll, diese Komprimierungsstufe durch die Einführung einer zusätzlichen Direktive <code>mod_gzip_compression_level</code> konfigurierbar zu gestalten.</p> 122 123 <h2><a id="boolean_rules"></a>Verknüpfung der <code>include</code>/<code>exclude</code>-Direktiven um Boole'sche Ausdrücke</h2> 124 <p><tt>mod_gzip</tt> 1.3.19.1a verwendet - aufgrund der Art seiner Einbettung in die Request-Verarbeitung des Apache-Servers - ein komplexes, zweistufiges Filterverfahren für die Entscheidung, ob das Ergebnis eines Requests komprimiert werden soll. <small>(In einer geänderten Architektur von Apache 2.0 könnte diese Einbettung in einfacherer Form möglich sein.)</small></p> 125 <p>Ein Request wird derzeit genau dann von <tt>mod_gzip</tt> akzeptiert, wenn in jeder der beiden Entscheidungsphasen mindestens eine <code>include</code>-Regel, aber keine <code>exclude</code>-Regel feuert. Da solche Regeln reguläre Ausdrücke als Parameterwerte erlauben, sind damit mächtige Bedingungen möglich.</p> 126 <p>Allerdings sind alle Regeln voneinander unabhängig. Die derzeit verfügbaren Direktiven erlauben es dem Anwender beispielsweise nicht, auszudrücken, daß bestimmte MIME-Typen nur an bestimmte Browser in komprimierter Form ausgeliefert werden sollen - es fehlt eine <code>AND</code> Verknüpfung zwischen mehreren Regeln.</p> 127 <p>Es scheint nur wenige Einsatzfälle für dieses Feature zu geben - derzeit wäre es vor allem notwendig, um Filterregeln zur Umgebung der diversen bugs in Netscape 4 zu formulieren, ohne diesen Browser komplett von der Komprimierung ausschließen. Mit der Zeit <small>(und besserer Standard-Kompatibilität der Browser)</small> könnte dieses Feature entbehrlich werden.</p> 128 129 <div id="icon"> 130 <a href="http://validator.w3.org/check/referer"><img alt="" title="valid XHTML 1.1" height="31" width="88" src="valid-xhtml11.png" /></a><a href="http://jigsaw.w3.org/css-validator/check/referer"><img alt="" title="valid CSS" height="31" width="88" src="valid-css.png" /></a> 131 </div> 132 133 134 <p id="mail">(<a href="mailto:michael.schroepl@gmx.de?subject=mod_gzip">Michael Schröpl</a>, 2002-09-28)</p> 135 136 </div> 137 138 </body> 139 </html>