Kompatibilität und Vorteile des Komprimierungsbrowsers gegenüber GZIP verringern

91

UPDATE 10. Februar 2012:

zOompf hat hier zu diesem Thema einige sehr gründliche Untersuchungen durchgeführt . Es übertrumpft alle Befunde unten.


UPDATE 11. September 2010:

Eine Testplattform wurde speziell für diese erstellt hier




HTTP 1.1-Definitionen von GZIP und DEFLATE (zlib) für einige Hintergrundinformationen:

"'Gzip' ist das gzip-Format und 'deflate' ist das zlib-Format . Sie hätten wahrscheinlich stattdessen das zweite 'zlib' nennen sollen, um Verwechslungen mit dem komprimierten Raw-Deflate-Datenformat zu vermeiden. Während der HTTP 1.1 RFC 2616 korrekt darauf verweist In der zlib-Spezifikation in RFC 1950 für die Übertragungscodierung "Deflate" wurden Berichte über Server und Browser veröffentlicht, die gemäß der Deflate-Spezifikation in RFC 1951 fälschlicherweise Deflate-Rohdaten erzeugen oder erwarten, insbesondere Microsoft-Produkte . Die Übertragungscodierung im Zlib-Format wäre der effizientere Ansatz ( und genau das , wofür das Zlib-Format entwickelt wurde) ist die Verwendung der 'gzip'-Übertragungscodierung aufgrund einer unglücklichen Namenswahl seitens der HTTP 1.1-Autoren wahrscheinlich zuverlässiger. "(Quelle: http://www.gzip.org/zlib/zlib_faq.html )

Meine Frage: Wenn ich RAW-Deflate-Daten ohne Zlib-Wrapper (oder gzip) sende, gibt es moderne Browser (z. B. IE6 und höher, FF, Chrome, Safari usw.), die die Roh-Deflate NICHT verstehen können komprimierte Daten (unter der Annahme, dass der HTTP-Anforderungsheader "Accept-Encoding" "deflate" enthält)?

Deflate-Daten sind IMMER einige Bytes kleiner als GZIP.

Wenn alle diese Browser die Daten erfolgreich dekodieren können, welche Nachteile hat das Senden von RAW-Deflate anstelle von zlib?



UPDATE 11. September 2010:

Eine Testplattform wurde speziell für diese erstellt hier

David Murdoch
quelle
1
Würde es Ihnen etwas ausmachen, zu erläutern, warum System.IO.Compression.DeflateStream im Vergleich zu zlib.net scheiße ist? Google zeigt mir nicht viel Relevantes, außer dass eine Person erwähnt, dass es "kein besonders gutes Komprimierungsverhältnis hat".
Joel Mueller
Richtig, das Komprimierungsverhältnis für die .zip-Methoden gzip und deflate scheint nicht annähernd so zu sein, wie es sein sollte. Ich habe jedoch keine Geschwindigkeits-Benchmarks zwischen den beiden durchgeführt (zlib.net vs. native .net).
David Murdoch
Warum protokollieren Sie nicht einfach die Ergebnisse Ihres Testfalls?
Gumbo
1
Ich habe in der System.IO.Compression-Bibliothek herumgestöbert, und es scheint, als würde ein statischer / vordefinierter Baum verwendet. Daher ist die Komprimierung nicht für den jeweiligen Stream optimiert. Sollte die schnellste Methode sein, ergibt aber definitiv schlechte Kompressionsverhältnisse.
Brady Moritz
2
@JoelMueller Dies könnte erklären: virtualdub.org/blog/pivot/entry.php?id=335
Nayuki

Antworten:

37

UPDATE: Browser haben die Unterstützung für Raw Deflate eingestellt. zOompf hat hier zu diesem Thema einige sehr gründliche Untersuchungen durchgeführt . Leider scheint es, dass Rohdeflat NICHT sicher zu verwenden ist.


Weitere Ergebnisse finden Sie unter http://www.vervestudios.co/projects/compression-tests/results .

Hier sind die getesteten Browser:

/*  Browser                       DEFLATE      ZLIB     */
    XP Internet Explorer 6        PASS         FAIL
    XP Internet Explorer 7        PASS         FAIL
    XP Internet Explorer 8        PASS         FAIL
    Vista Internet Explorer 8     PASS         FAIL
    XP Firefox 3.6.*              PASS         PASS
    XP Firefox 3.5.3              PASS         PASS
    XP Firefox 3.0.14             PASS         PASS
    Win 7 Firefox 3.6.*           PASS         PASS
    Vista Firefox 3.6.*           PASS         PASS
    Vista Firefox 3.5.3           PASS         PASS
    XP Safari 3                   PASS         PASS
    XP Safari 4                   PASS         PASS     
    XP Chrome 3.0.195.27          PASS         PASS
    XP Opera 9                    PASS         PASS
    XP Opera 10                   PASS         PASS
    XP Sea Monkey 1.1.8           PASS         PASS
    Android 1.6 Browser (v4)*     N/A          N/A
    OS-X Safari 4                 PASS         PASS
    OS X Chrome 7.0.517.44        PASS         PASS
    OS X Opera 10.63              PASS         PASS
    iPhone 3.1 Safari             PASS         PASS

* Android Sendet den HTTP-Anforderungsheader "Accept-Encoding: gzip". Entleeren ist nicht erlaubt.


Ich komme zu dem Schluss, dass wir immer roh senden können komme zu dem DEFLATE (wenn der HTTP-Anforderungsheader "Accept-Encoding" "Deflate" enthält) und der Browser die codierten Daten korrekt interpretieren kann. Kann jemand das falsch beweisen?

Hinweis: Die native Implementierung von DEFLATE (System.IO.Compression.DeflateStream) in .NET ist unformatiertes DEFLATE. Es ist auch scheiße. Bitte verwenden Sie zlib.net für alle Ihre .NET-Deflationsanforderungen.

David Murdoch
quelle
1
Können Sie die Verwendung von zlib.net zum Entleeren genauer beschreiben? Wie passt das zum obigen Diagramm, in dem steht, dass Raw Deflate funktioniert, zlib jedoch in einigen XP IE-Fällen nicht?
David Eison
Android unterstützt die Deflate-Komprimierung seit API 9. Weitere Informationen finden Sie unter: developer.android.com/reference/java/util/zip/…
Stuart Blackler,
1
@ DavidMurdoch das einzig vernünftige Ergebnis Ihrer Tests scheint niemals Deflate zu verwenden , vervestudios.co/projects/compression-tests/results Ich denke, diese Antwort sollte bearbeitet werden, um dies widerzuspiegeln
Sam Saffron
Ja, ich stimme zu. Jetzt aktualisieren.
David Murdoch
6

Der Android 1.6-Browser (v4) besteht sowohl den zlib- als auch den Deflate-Test auf Ihrer Seite nicht. Ich habe es Ihrer Liste hinzugefügt.

Josef Pfleger
quelle
Vielen Dank! Welche Inhaltskodierung sendet der Android-Browser?
David Murdoch
Es sendet 'Accept-Encoding: gzip'.
Josef Pfleger
1

Ist es nicht so, dass die AddOutputFilterByType DEFLATEVerwendung von mod_deflate standardmäßig per gzip gesendet wird?

Paul Irish
quelle
1
Hey Paul, ich habe das Gefühl, ich spreche mit einer Berühmtheit ... du bist überall. :-) Wie auch immer, AddOutputFilertByType DEFLATEgzips die Antwort, anstatt sie standardmäßig zu entleeren (soweit ich weiß). Gzipist deflate+ ein 10-Byte-Header + 8-Byte-Fußzeile - was bedeutet, dass Gzipdas IMMER größer sein wird als deflate... warum sollten wir also jemals gzip verwenden? ( Eine Aufschlüsselung der Bestandteile von gzip finden Sie unter en.wikipedia.org/wiki/Gzip#File_format .) Vor diesem Hintergrund bin ich mir nicht sicher, wie ich deflatedie bevorzugte Komprimierungsmethode in Apache festlegen soll.
David Murdoch
-1

Soweit ich weiß, ja - so ziemlich Sie "können immer rohe DEFLATE senden und alles wäre in Ordnung" ... es gibt nicht "immer", aber vor allem Fälle. Wenn nicht, ist dies das Problem des Browsers.

Letterman
quelle
Ich versuche, die Fälle zu finden, in denen die Rohentleerung fehlschlägt. Laut Spezifikation sollte es in allen Browsern fehlschlagen.
David Murdoch
Raw deflate(dh nicht zlib , überhaupt keine Header) funktioniert in IE7 nur, wenn encoding:gzipund (nur in Chrome v24 getestet) encoding:deflatein Chrome .
Scotty.NET