70 Stimmen

Warum bevorzugen Server in der realen Welt die gzip- gegenüber der deflate-Kodierung?

Wir wissen bereits Deflate-Kodierung ist ein Gewinner gegenüber gzip in Bezug auf die Geschwindigkeit der Kodierung, Dekodierung und Kompressionsgröße.

Warum also senden keine großen Websites (die ich finden kann) diese Informationen (wenn ich einen Browser verwende, der sie akzeptiert)?

Yahoo behauptet Entleeren ist "weniger wirksam". Warum?

Ich verwalte eine HTTP-Server-Software, die Deflate bevorzugt, und ich würde gerne wissen, ob es einen wirklich guten Grund gibt, dies nicht weiterhin zu tun.

80voto

Gumbo Punkte 617646

Es gibt einige Verwirrung über die Namensgebung zwischen den Spezifikationen und dem HTTP:

  • DEFLATE gemäß der Definition von RFC 1951 ist eine komprimiertes Datenformat .
  • ZLIB gemäß der Definition von RFC 1950 ist eine komprimiertes Datenformat die den DEFLATE Datenformat.
  • GZIP gemäß der Definition von RFC 1952 ist eine Dateiformat die den DEFLATE komprimiertes Datenformat.

Aber die HTTP verwendet eine andere Namensgebung :

  • gzip Ein Kodierungsformat, das von dem Dateikomprimierungsprogramm "gzip" (GNU zip) erzeugt wird, wie in RFC 1952 [25] beschrieben. Dieses Format ist eine Lempel-Ziv-Kodierung (LZ77) mit einer 32-Bit-CRC.

  • deflate Das in RFC 1950 [31] definierte "zlib"-Format in Kombination mit dem in RFC 1951 [29] beschriebenen "deflate"-Komprimierungsmechanismus.

Zusammenfassend lässt sich also feststellen:

  • gzip ist die GZIP Dateiformat.
  • deflate ist eigentlich die ZLIB Datenformat. (Einige Clients akzeptieren aber auch das eigentliche DEFLATE Datenformat für deflate .)

Siehe auch diese Antwort auf die Frage Was ist der Unterschied zwischen den HTTP-1.1-Kodierungen "gzip" und "deflate"? :

Was ist der Unterschied zwischen den HTTP-1.1-Kodierungen "gzip" und "deflate"?

"gzip" ist das gzip-Format, und "deflate" ist das zlib-Format. Man hätte das zweite Format stattdessen "zlib" nennen sollen, um Verwechslungen mit dem komprimierten Rohdatenformat deflate zu vermeiden. Während HTTP 1.1 RFC 2616 korrekt auf die zlib-Spezifikation in RFC 1950 für die "deflate"-Übertragungskodierung verweist, gibt es Berichte über Server und Browser, die fälschlicherweise Deflate-Rohdaten gemäß der Deflate-Spezifikation in RFC 1951 erzeugen oder erwarten, vor allem Microsoft. Obwohl also die "deflate"-Übertragungskodierung unter Verwendung des zlib-Formats der effizientere Ansatz wäre (und in der Tat genau das ist, wofür das zlib-Format konzipiert wurde), ist die Verwendung der "gzip"-Übertragungskodierung aufgrund einer unglücklichen Namenswahl seitens der Autoren von HTTP 1.1 wahrscheinlich zuverlässiger.

9voto

Steve Clay Punkte 8340

Aus meinen minimalen Tests geht hervor, dass die meisten HTTPds entweder:

  1. unterstützen nicht die Funktion "Deflate on-the-fly": Apache's mod_deflate (eine Überraschung), GWS
  2. oder lieber gzip senden: IIS, mod_compress von lighttpd

Um Deflate auf dem am meisten verbreiteten Server (Apache) zu senden, müssen Sie also vorcodierte Dateien pflegen und mod_negotiate verwenden (möglicherweise müssen Sie sogar type-maps verwenden, um Deflate zu bevorzugen).

Ich würde vermuten, dass Deflate aufgrund dieser Schwierigkeiten nur selten verwendet wird und daher Bugs wahrscheinlicher in der Deflate-Unterstützung des Clients als in der Gzip-Unterstützung zu finden.

2 Stimmen

Außerdem habe ich gelesen, dass Server in manchen Fällen eine mit "Deflate" bezeichnete Kodierung senden, die in Wirklichkeit gzipped ist, oder umgekehrt, und die Clients haben sich auf diesen Fehler eingestellt.

7voto

David Murdoch Punkte 85120

Auf dieser Website finden Sie weitere Informationen: http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests


Deflate ist laut Spezifikation eigentlich zlib (ein Komprimierungsformat, das speziell für das Streaming von Inhalten über das Internet entwickelt wurde)... das ein Wrapper für Deflate ist.

Der Internet Explorer implementiert HTTP 1.1 deflate (zlib) jedoch fälschlicherweise als raw deflate. Wenn Ihr Server also korrekte HTTP 1.1 deflate (zlib)-Inhalte an den IE sendet, kommt er ins Stocken.

Ich habe das Thema ein wenig recherchiert und es sieht so aus, als wäre es sicher, IMMER zu senden roh deflate in modernen Browsern...stellen Sie einfach sicher, dass es tatsächlich so ist, roh und nicht zlib.

Weitere Informationen finden Sie in diesem Artikel > Gzip vs. Deflate (zlib) revisited .

Ich denke also, dass es einen guten Grund gibt, weiterhin deflate statt gzip zu senden.

0 Stimmen

Siehe auch den in Ihrem SO-Thread erwähnten Artikel von Zoompf hier zoompf.com/blog/2012/02/lose-the-wait-http-compression mit Problemen mit (raw) Deflate erwähnt.

0 Stimmen

Ich empfehle jetzt gzip, da viele Browser seit 2010 die Unterstützung von Raw Deflate eingestellt haben.

6voto

mmx Punkte 400975

Soweit ich weiß (Haftungsausschluss: Ich bin kein Experte, ich habe nur gehört, was ich weiß), gzip verwendet denselben Algorithmus wie deflate aber er hat mehr Kopfzeilen, die ihn größer machen (im Vergleich zu deflate ). Ich denke jedoch deflate wird von weniger Clients und Proxys unterstützt.

1 Stimmen

Dies deckt sich auch mit meinem Wissen. Der Unterschied sollte nicht größer als ein paar Dutzend Bytes sein...

1 Stimmen

@ephemient: Ja, von der Größe her sollte es keinen großen Unterschied geben, aber es scheint, dass diese Bytes Prüfsummen sind, die Taktzyklen benötigen, um generiert und überprüft zu werden, was gzip auch langsamer als deflate macht.

2 Stimmen

Ab 6/08 haben weniger Bots das Angebot angenommen: computec.ch/projekte/browserrecon/ Einige erkenne ich wieder: Apache Lucene Nutch, Google Search Appliance Crawler (nicht Googlebot), einige Versionen von Yahoo! Slurp (Stand: Juni 08). Aber jeder Proxy/Client, der Deflate nicht unterstützt, wird es nicht in Accept-Encoding auflisten, so dass es keinen Schaden anrichten sollte, wenn man es einfach vorzieht, Deflate zu senden, wenn man die Wahl hat. Ich werde dies vielleicht auf einer Apache-Entwicklungsliste ansprechen.

1voto

karim79 Punkte 333786

Das habe ich mich auch gefragt :). Ich denke, es könnte mit der Kompatibilität älterer (möglicherweise alter) Browser zu tun haben. Ich habe irgendwo gelesen, dass ältere Browser bei deflatierten Inhalten, die mod_gzipped in bestimmten Fällen(?) aber googeln diese führte mich zu dem Schluss, dass es wahrscheinlich am besten zu stoppen googeln es.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X