Wie funktioniert serverseitiges GZipping?

8

Sie wissen vielleicht, dass HTML-bezogene Dateiformate mit der GZip-Komprimierung serverseitig komprimiert werden (durch mod_gzip auf Apache) Server) und werden von kompatiblen Browsern dekomprimiert. ("Inhaltscodierung")

Funktioniert das nur für HTML / XML-Dateien? Sagen wir, dass meine PHP / Perl-Datei einige einfache kommagetrennte Daten erzeugt und diese an den Browser sendet, wird sie dann standardmäßig codiert?

Was ist mit Plattformen wie Silverlight oder Flash, wenn sie solche Daten herunterladen, wird sie automatisch vom Browser / Runtime komprimiert / dekomprimiert? Gibt es eine Möglichkeit, dies zu testen?

    
Robin Rodricks 09.08.2009, 18:22
quelle

3 Antworten

9
  

Funktioniert das nur für HTML / XML?   Dateien?

Nein: Es wird häufig für CSS- und JS-Dateien verwendet, da diese zu den größten Dingen zählen, aus denen Websites bestehen (mit Ausnahme von Bildern), da es sich um JS-Frameworks und vollständige JS-Anwendungen handelt riesiger Gewinn!

Tatsächlich kann jedes textbasierte Format recht gut komprimiert werden (im Gegensatz dazu können Bilder zB nicht, da sie im Allgemeinen bereits komprimiert sind) ; manchmal werden JSON-Daten, die von Ajax-Anfragen zurückgegeben werden, ebenfalls komprimiert - es sind Textdaten, nachher; -)

  

Sagen wir, meine PHP / Perl-Datei wird erzeugt   einige einfache Komma-getrennte Daten und   sendet das an den Browser, wird es sein   standardmäßig codiert?

Es ist eine Frage der Konfiguration: Wenn Sie Ihren Server so konfiguriert haben, dass er solche Inhalte komprimiert, wird er wahrscheinlich komprimiert :-)
(Wenn der Browser angibt, dass er gzip-kodierte Daten akzeptiert)


Hier ist ein Beispiel für die Konfiguration von Apache 2 (mit mod_deflate), die ich in meinem Blog verwende:

%Vor%

Hier möchte ich html / xml / css / JS te komprimiert werden.

Und hier ist das Gleiche, plus / minus ein paar Konfigurationsoptionen, die ich einmal unter Apache 1 (mod_gzip) verwendet habe:

%Vor%

Dinge, die hier bemerkt werden können, sind, dass ich nicht zu klein (der Gewinn wäre nicht sehr wichtig) oder zu groß (würde zu viel CPU essen, um sie zu komprimieren), um Dateien zu komprimieren; und ich möchte css / html / txt / js Dateien komprimiert werden, aber keine Bilder.


Wenn Sie möchten, dass die durch Kommas getrennten Daten auf die gleiche Weise komprimiert werden, müssen Sie entweder den Inhaltstyp oder die Erweiterung der Konfiguration Ihres Webservers hinzufügen, um die gzip-Komprimierung dafür zu aktivieren.

  

Gibt es eine Möglichkeit, das zu testen?

Für alle Inhalte, die direkt an den Browser zurückgegeben werden, sind die Firefox-Erweiterungen Firebug oder LiveHTTPHeaders sind ein Muss.

Für Inhalte, die nicht den Standard-Kommunikationsweg des Browsers durchlaufen, ist es möglicherweise schwieriger; Am Ende müssen Sie am Ende mit etwas wie Wireshark arbeiten, um zu "schnüffeln", was wirklich durch die Pfeifen geht ... Gut Glück damit!

  

Was ist mit Plattformen wie Silverlight oder Flash,   wenn sie solche Daten herunterladen, werden sie komprimiert / dekomprimiert   durch den Browser / Runtime automatisch?

Um Ihre Frage zu Silverlight und Flash zu beantworten, sendet Apache, wenn sie einen Accept-Header senden, der anzeigt, dass sie komprimierten Inhalt unterstützen, mod_deflate oder mod_gzip. Wenn sie die Komprimierung nicht unterstützen, werden sie den Header nicht senden. Es wird "einfach funktionieren." - Nate

    
Pascal MARTIN 09.08.2009, 18:25
quelle
5

Ich denke Apache mod_deflate ist häufiger als mod_gzip , weil es gebaut ist -in und macht das Gleiche. Sehen Sie in der Dokumentation für mod_deflate (oben verlinkt) nach und Sie werden sehen, dass es einfach ist, basierend auf ihren MIME-Typen festzulegen, welche Dateitypen komprimiert werden sollen. Generell lohnt es sich, HTML, CSS, XML und JavaScript zu komprimieren. Bilder sind bereits komprimiert, daher profitieren sie nicht von der Komprimierung.

    
Nate 09.08.2009 18:34
quelle
4

Der Browser sendet einen Header "Accept-Encoding" mit den Komprimierungstypen, die er zu verstehen versteht. Der Server betrachtet dies zusammen mit dem Benutzeragenten und entscheidet, wie das Ergebnis codiert wird. Einige Browser lügen über das, was sie verstehen können, also ist dies komplexer als nur nach "deflate" in der Kopfzeile suchen.

Technisch gesehen kann jede HTTP / 2xx-Antwort mit Inhalt mit einer der gültigen Inhaltscodierungen (gzip, zlib, deflate usw.) inhaltscodiert werden, aber in der Praxis ist es verschwenderisch, die Komprimierung auf gebräuchliche Bildtypen anzuwenden, weil sie tatsächlich funktioniert macht sie größer.

Sie können die Antwort von dynamischen PHP-Seiten definitiv komprimieren. Die einfachste Methode ist das Hinzufügen von:

%Vor%

zum Anfang jeder PHP-Seite. Es ist natürlich besser, es durch die PHP-Konfiguration einzurichten.

Es gibt viele Testseiten, die Sie problemlos mit Google finden :

Tim Sylvester 09.08.2009 18:41
quelle