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>Welche Browser können mit 'Content-Encoding: gzip' umgehen?</title> 7 <meta name="author" content="Michael Schröpl" /> 8 <meta name="description" content="Eine Beschreibung des Verhaltens der verbreitetsten Web-Browser bezüglich komprimierter Seiteninhalte" /> 9 <meta name="keywords" content="Browser, 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 <p>Browser</p> 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 <a title="Mögliche Erweiterungen in künftigen Versionen von mod_gzip" href="enhancements.htm">Erweiterungen</a> 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>Welche Browser können mit <code>Content-Encoding: gzip</code> umgehen?</h1> 109 110 <h2><a id="Netscape3"></a>Netscape 3</h2> 111 <p>Dieser Browser verwendet HTTP/1.0. Er sendet keinen <code>Accept-Encoding</code>-Header, fordert also von einem Server <em>keine</em> komprimierten Inhalte an.</p> 112 <p>Der Browser <strong>unterstützt die Verarbeitung komprimierter Seiteninhalte noch nicht</strong>. Wird ihm gzip-komprimierter Inhalt ausgeliefert, dann erkennt er zwar, daß eine ihm unbekannte Kodierung <code>gzip</code> vorliegt <small>(und zeigt dies dem Benutzer durch eine entsprechende Meldung an)</small>, aber anschließend gibt er den komprimierten Inhalt der Seite im Browser-Fenster aus. Für eine unbedingte Auslieferung komprimierter Inhalte <small>(etwa von statisch vorkomprimierten Dokumenten)</small> ist dieser Browser also nicht zu gebrauchen.</p> 113 <p>Ein Webserver, der den <code>Accept-Encoding</code>-Header korrekt auswertet, ist in der Lage, den Browser mit für ihn darstellbaren, unkomprimierten Daten zu versorgen.</p> 114 115 <h2><a id="Netscape4"></a>Netscape 4</h2> 116 <p>Dieser Browser verwendet HTTP/1.0. Ab der Version 4.06 sendet er den Header <code>Accept-Encoding: gzip</code>.</p> 117 <p>Allerdings enthält die Implementierung der Verarbeitung komprimierter Inhalte eine ganze Reihe <strong>schwerer Fehler</strong>:</p> 118 <ul> 119 <li>In vielen Versionen 4.x werden <strong>Cascading Style Sheets</strong>, welche durch den HTML-<i>tag</i><br /> 120 <code><link rel="stylesheet" type="text/css" href="</code><i>dateiname</i><code>" /></code><br /> 121 aus einer separaten Datei hinzu geladen werden, <em>nicht</em> dekomprimiert und damit nicht ausgewertet.</li> 122 <li>In vielen Versionen 4.x wird <strong>JavaScript-Code</strong>, welcher durch den HTML-<i>tag</i><br /> 123 <code><script type="text/javascript" src="</code><i>dateiname</i><code>" /></code><br /> 124 aus einer separaten Datei hinzu geladen werden, nur dann dekomprimiert und ausgewertet, wenn im Browser ein <strong>Cache aktiviert</strong> ist.<br /> 125 <small>(Bei aktiviertem JavaScript im Browser kann dieses Problem zusätzlich zu JavaScript-Fehlermeldungen führen, falls im HTML-Quelltext Bezug auf Definitionen des eingebundenen JavaScript-Codes genommen wird.)</small></li> 126 <li>In vielen Versionen 4.x wird vor dem <strong>Drucken des Seiteninhalts</strong> der HTML-Code des Dokuments nur dann dekomprimiert, wenn im Browser ein <strong>Cache aktiviert</strong> ist; dasselbe gilt für die <strong>Darstellung des Seiteninhalts im Print-Preview-Modus</strong>.</li> 127 <li>In vielen Versionen 4.x arbeitet die <strong>Darstellung des HTML-Quelltextes</strong> des aktuellen Dokuments nur dann korrekt, wenn im Browser ein <strong>Cache aktiviert</strong> ist. Andernfalls wird statt des Quelltextes ein leerer Bildschirm angezeigt</li> 128 <li>In vielen Versionen 4.x kann <small>(unter schwer reproduzierbaren Umständen)</small> die korrekte Verarbeitung von <strong>gzip-komprimierten Bildern</strong> fehlschlagen. <small>(Allerdings sollten Bilder ohnehin manuell optimiert werden, etwa durch Auswahl des geeignetsten Dateiformats, Verwendung einer kleinstmöglichen Farbtiefe etc. - die gzip-Komprimierung eines bereits komprimierten Dateiformats bewirkt keine nennenswerte Einsparung mehr.)</small></li> 129 <li>In den Versionen 4.06 bis 4.08 gibt es sogar Probleme mit der Verarbeitung von JavaScript-Code innerhalb des <code><head></code>-Abschnitts komprimierter HTML-Seiten selbst.</li> 130 </ul> 131 <p>In all diesen Fällen scheint Netscape 4 die empfangene, noch nicht dekomprimierte Version zu verwenden; offensichtlich wurde der Aufruf einer <small>(zweifellos vorhandenen)</small> Funktion zur Dekomprimierung des Inhalts an entscheidenden Stellen einfach vergessen.</p> 132 <p>Und teilweise treten die beschriebenen Fehler nur dann auf, wenn der Browser-Cache auf 0 MB gesetzt und/oder abgeschaltet wurde - es sieht also so aus, als würde Netscape 4 den Browser-Cache als Zwischenspeicher bei der Dekomprimierung verwenden ...</p> 133 134 <h2><a id="Mozilla"></a>Netscape 6 & 7 und Mozilla 0.9.x & 1.x</h2> 135 <p>Dieser Browser verwendet HTTP/1.1. Seit Netscape 6.2 <small>(= Mozilla 0.9.4)</small> sendet der Browser den Header <code>Accept-Encoding: gzip, deflate, compress;q=0.9</code>.</p> 136 <p>Mozilla 0.9.9+ und Netscape 7.0PR1 erlauben dem Anwender, sowohl die HTTP-Version als auch den Inhalt dieses Headers in seiner Konfiguration zu definieren; in Mozilla 1.1alpha ist diese Funktion nicht mehr in den Preferences sichtbar, aber über die Konfigurationsdatei <code>defaults/pref/all.js</code> einstellbar <small>(unter dem Namen <code>network.http.accept-encoding</code>)</small>.</p> 137 <p>Die Verarbeitung komprimierter Inhalte funktioniert, <em>wenn der Browser selbst komprimierte Inhalte angefordert hat</em>; ist diese nicht der Fall, dann ignoriert er den HTTP-Header <code>Content-Encoding: gzip</code>, obwohl er den Inhalt dekomprimieren könnte.</p> 138 139 <h2><a id="Microsoft"></a>Microsoft Internet Explorer 4.0, 5.0, 5.5 and 6.0</h2> 140 <p>Dieser Browser verwendet entweder HTTP/1.0 oder HTTP/1.1, je nach Einstellung in seinen Internet-Optionen. Er sendet den Header <code>Accept-Encoding: gzip, deflate</code> - allerdings nur genau dann, wenn er HTTP/1.1 verwendet.</p> 141 <p>Die Verarbeitung komprimierter Inhalte funktioniert, <em>wenn der Browser selbst komprimierte Inhalte angefordert hat</em>; ist diese nicht der Fall, dann ignoriert er den HTTP-Header <code>Content-Encoding: gzip</code>, obwohl er den Inhalt dekomprimieren könnte.</p> 142 <p>Einige ältere Versionen des Internet Explorers scheinen den JavaScript-Event <code>onLoad</code> bereits dann zu feuern, wenn sie eine im <code><head></code>-Abschnitt referenzierte JavaScript-Datei erfolgreich <em>empfangen</em> haben, statt auf den erfolgreichen Abschluß der <em>Dekomprimierung</em> ihres Inhalts zu warten.</p> 143 144 <h2><a id="Opera-old"></a>Opera 3 und 4</h2> 145 <p>Opera 3.5 verwendet HTTP/1.0 und versteht <em>noch keine</em> komprimierten Inhalte.</p> 146 <p>Seit Version 4 verwendet Opera HTTP/1.1. Opera 4.0beta3 versuchte bereits, in komprimierter Form zu kommunizieren, sendete allerdings den Header <code>TE: deflate, gzip, x-gzip, identity, trailers</code>, d. h. es erwartete gzip-Komprimierung als Anwendung eines <em>Transfer Encoding</em>, nicht als <em>Content Encoding</em>.</p> 147 148 <h2><a id="Opera"></a>Opera 5 und 6</h2> 149 <p>Ab Version 5.12 <small>(oder etwas früher)</small> sendet Opera den Header <code>Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0</code>. Die Verarbeitung komprimierter Inhalte funktioniert von Version 5 aufwärts ohne bekannte Probleme.</p> 150 <p>Opera 6 dekomprimiert <small>(als einziger bisher bekannter Browser)</small> den gzip-komprimierten Dokumentinhalte sogar dann, wenn der Server ihn <em>nicht</em> durch die Lieferung des HTTP-Headers <code>Content-Encoding: gzip</code> darauf aufmerksam gemacht hat.</p> 151 152 <h2><a id="Lynx"></a>Lynx</h2> 153 <p>Lynx unterstützt gzip-komprimierte Kommunikation seit Version 2.6.</p> 154 <p>Die ersten Lynx-Versionen starteten zum Dekomprimieren das Systemkommando <code>gzip -d</code> in einem separaten Prozeß. Dies führt natürlich zu Problemen, falls kein <code>gzip</code>-Kommando verfügbar war.</p> 155 <p>Neuere Versionen von Lynx <small>(ab 1997-08-14, laut <code>CHANGES</code>-Datei von Lynx 2.8.0)</small> verwenden die <code>zlib</code>-Bibliothek zur Dekomprimierung und haben dieses Problem nicht mehr.</p> 156 157 <div id="icon"> 158 <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> 159 </div> 160 161 162 <p id="mail">(<a href="mailto:michael.schroepl@gmx.de?subject=mod_gzip">Michael Schröpl</a>, 2002-09-16)</p> 163 164 </div> 165 166 </body> 167 </html>