LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Blog-Übersicht /Web Entwicklung/Tutorials / gzip, Brotli und zstd: HTTP-Kompression gemessen
Diesen Artikel in anderen Sprachen lesen:

gzip, Brotli und zstd: HTTP-Kompression gemessen

gzip, Brotli und zstd: HTTP-Kompression gemessen

Management Summary

HTTP-Kompression verkleinert übertragene Webantworten, bedeutet aber keine entsprechend vielfach schnellere Seite. Eine Stichprobe von zwanzig Domains ergab siebzehn reguläre Seiten: elf mit gzip, fünf mit Brotli und eine ohne Kompression. Drei Zugriffssperren blieben außerhalb der Auswertung. Daraus entstehen weder Marktanteile noch eine Rangliste der Verfahren. Für die Auswahl zählen identische Inhalte, Rechenzeit und Übertragungsgröße. Statische Dateien können vorab komprimiert werden; dynamische Seiten brauchen eine passende Abwägung.

Inhalt
  1. Wie die Antwortkodierung gewählt wird
  2. gzip, Brotli, zstd und deflate
  3. Die gemessenen Antworten
  4. Faktor und Ersparnis sind verschiedene Zahlen
  5. Eine Messung braucht zusammengehörige Antwortkörper
  6. Fragen und Antworten
  7. Quellen

HTTP-Kompression verringert die für einen Antwortkörper übertragenen Bytes. Das Ergebnis hängt vom Inhalt, den Kompressionseinstellungen und der tatsächlich gelieferten Antwort ab. Ein erfolgreicher HTTP-Status allein beweist noch keinen Abruf der gewünschten Startseite.

Eine Prüfung von zwanzig Domains am 24. Oktober 2026 ergab siebzehn reguläre HTML-Antworten und drei Sperrantworten. Von den siebzehn regulären Antworten nutzten elf gzip, fünf Brotli und eine kein Content-Encoding. Keine Antwort wählte zstd. Das sind Beobachtungen einer Abrufkonfiguration, keine Marktanteile oder dauerhaften Websiteeinstellungen.

Kompressionsstichprobe: 24. Oktober 2026: 20 Domains geprüft; Sperrseiten sind keine regulären Startseiten
Kompressionsstichprobe: 24. Oktober 2026: 20 Domains geprüft; Sperrseiten sind keine regulären Startseiten.

Wie die Antwortkodierung gewählt wird

Accept-Encoding nennt akzeptierte Antwortkodierungen. Die Stichprobe bot gzip, deflate, br, zstd mit gleichen Standardgewichten an. Serverfähigkeiten, Konfiguration und Ressourcenart beeinflussen die Auswahl; die Reihenfolge dieser Liste garantiert keine bevorzugte Kodierung. Eine unkodierte Antwort ist normalerweise ebenfalls zulässig, sofern nicht ausdrücklich ausgeschlossen.

Content-Encoding nennt die tatsächlich angewendete Kodierung. Ein fehlendes Feld bedeutet keine deklarierte Inhaltskodierung, aber keinen Nachweis einer unveränderten Datei auf der Festplatte. HTML kann dynamisch entstehen. Mehrere Kodierungen sind ebenfalls möglich; das Dekodieren erfolgt dann in umgekehrter Reihenfolge der Anwendung.

Wenn die Darstellung von diesem Anfragefeld abhängt, hilft Vary: Accept-Encoding regelkonformen Caches bei der Trennung der Varianten. Der Header beweist keine korrekte Konfiguration aller Zwischenstationen. Gespeicherte oder vorkomprimierte Antworten können ohne erneutes Komprimieren bei jeder Anfrage ausgewählt werden.

gzip, Brotli, zstd und deflate

  • gzip: weit verbreitet, aber nicht für jedes Programm oder jeden Werkzeugbuild garantiert. Die angekündigten Fähigkeiten bleiben entscheidend.
  • Brotli (br): häufig wirksam für Text. Höhere Qualitätsstufen können kleinere Dateien erzeugen, brauchen dafür aber mehr Rechenzeit; ein fester Tempo- oder Größenvorteil gilt nicht für jeden Inhalt.
  • Zstandard (zstd): zielt auf ein günstiges Verhältnis zwischen Tempo und Kompressionswirkung. Stufe, Implementierung, Hardware und Daten beeinflussen das Ergebnis. Null Auswahlen in dieser Stichprobe belegen weder fehlende Browserunterstützung noch allgemeine Nichtunterstützung auf Servern.
  • deflate: die HTTP-Kodierung verwendet eine zlib-Hülle um DEFLATE. Auch gzip nutzt üblicherweise DEFLATE, aber eine andere Hülle. Die Formate sind nicht austauschbar.

Das tatsächliche Browserangebot hängt von Version und Kontext ab. Eine von Hand zusammengestellte curl-Anfrage prüft keine Browserkompatibilität.

Die gemessenen Antworten

Die Messung lief am 24. Oktober 2026 zwischen 04:45:33 und 04:45:37 UTC von einem Raspberry Pi aus. curl 8.14.1 unterstützte alle vier angebotenen Decoder. Je Domain erfolgte eine Abrufkette mit verfolgten HTTPS-Weiterleitungen, ohne Anmeldung oder Browser-JavaScript und mit der üblichen curl-Programmkennung. Die Tabelle beschreibt die letzte Antwort. Header, dekodierte Antwortkörper und curl-Metadaten wurden zur Nachprüfung aufbewahrt.

Domain HTTP Content-Encoding Kodierte Bytes Dekodierte Bytes Einordnung
wikipedia.org 200 gzip 28883 122421 reguläres HTML
github.com 200 gzip 118918 580257 reguläres HTML
bbc.com 200 gzip 92972 649846 reguläres HTML
nytimes.com 403 fehlt 771 771 Zugriffssperre
cloudflare.com 200 br 109639 1333885 reguläres HTML
mozilla.org 200 br 8032 47807 reguläres HTML
apple.com 200 gzip 47325 326751 reguläres HTML
microsoft.com 200 fehlt 201253 201253 Zugriffssperre
spiegel.de 200 gzip 272825 1958177 reguläres HTML
heise.de 200 gzip 135977 936097 reguläres HTML
python.org 200 fehlt 52766 52766 reguläres HTML
debian.org 200 gzip 4279 15864 reguläres HTML
kernel.org 200 gzip 3438 19152 reguläres HTML
gnu.org 200 gzip 9806 31463 reguläres HTML
w3.org 200 br 8996 49520 reguläres HTML
nginx.org 200 gzip 2206 6461 reguläres HTML
postgresql.org 200 gzip 5914 25040 reguläres HTML
zeit.de 403 fehlt 5439 5439 Zugriffssperre
tagesschau.de 200 br 128481 1613994 reguläres HTML
php.net 200 br 11789 60308 reguläres HTML

New York Times und ZEIT antworteten mit HTTP 403. Microsoft lieferte HTTP 200, jedoch ausdrücklich eine Zugriffssperrseite. Diese drei Antworten zählen nicht zur Auswertung regulärer Startseiten. Der Microsoft-Antwortkörper umfasste 201.253 Bytes ohne deklarierte Inhaltskodierung; daraus folgt keine Kompressionsregel der eigentlichen Microsoft-Startseite.

Python.org lieferte in diesem Lauf reguläres Startseiten-HTML ohne Content-Encoding. Ein Hinweis auf fehlendes JavaScript steht innerhalb dieser Startseite; der Hinweis allein bildet keine separate Sperrseite. Frühere oder anders konfigurierte Abrufe können andere Darstellungen erhalten.

Ein hoher Plattenstapel neben einem Rahmen und dahinter dieselben Platten als weit niedrigerer Stapel; ein korallenroter Stapel zieht in voller Höhe oben darüber hinweg

Faktor und Ersparnis sind verschiedene Zahlen

Der Faktor ergibt sich aus dekodierten Antwortbytes geteilt durch kodierte Antwortbytes. Faktor 4 bedeutet ein Viertel der ursprünglichen Körpergröße, also 75 Prozent weniger Bytes. Daraus folgt keine vierfach schnellere Darstellung der Webseite.

Unter den komprimierten regulären Antworten reichten die Faktoren von 2,93 bei nginx.org bis 12,56 bei tagesschau.de. Bei tagesschau.de standen 1.613.994 dekodierten Bytes 128.481 kodierte Bytes gegenüber, rund 92,0 Prozent weniger Antwortkörperdaten. Nicht enthalten sind Antwortheader, TLS- und Transportanteile, weitere Seitenressourcen und Darstellungsarbeit.

Verschiedene Websites liefern verschiedene Ausgangsdaten. Diese Faktoren erlauben deshalb keine Rangliste der Verfahren. Ein fairer Vergleich komprimiert identische Bytes mit dokumentierten Einstellungen und misst neben der Größe auch Rechenzeit. Entscheidend ist Wiederholung, nicht allein Dateilänge oder der Einsatz eines Frameworks.

Eine Messung braucht zusammengehörige Antwortkörper

Zwei getrennte Anfragen können unterschiedliche Inhalte, Weiterleitungen, Fehlerseiten oder Cachevarianten vermischen. Auch eine Identity-Anfrage erfordert die Prüfung des tatsächlichen Content-Encoding. Der Vergleich der übertragenen und entpackten Größe derselben Antwort verhindert, dass unterschiedliche Inhalte verglichen werden, verlangt aber weiterhin einen vollständigen erfolgreichen Transfer, korrektes Dekodieren und eine Inhaltsprüfung.

Bei dieser Messung nutzte curl --compressed: Die gespeicherte Datei war dekodiert, während size_download die übertragenen Antwortkörperbytes erfasste. Gespeicherte Antwortheader beschreiben weiterhin die Kodierung der Übertragung. Ein gzip-Header rechtfertigt deshalb kein erneutes Entpacken der bereits dekodierten Datei.

Fragen und Antworten

Lohnt zusätzliche Kompression für Bilder und Schriften?

Bereits komprimierte JPEG-, PNG-, WebP-, AVIF- und WOFF2-Dateien gewinnen häufig wenig oder werden größer. SVG ist Text und profitiert oft. Die Dateiendung allein reicht nicht zur Entscheidung; tatsächliche Bytes und MIME-Typ zählen.

Sollte Brotli immer auf der höchsten Stufe laufen?

Nein. Brotli unterstützt Qualitätsstufen von 0 bis 11. Hohe Einstellungen können deutlich mehr Rechenzeit benötigen. Statische Dateien lassen sich beim Build vorkomprimieren; bei dynamischen Antworten muss der Kompressionsaufwand zur verfügbaren Rechenleistung und zulässigen Antwortzeit passen. Auch gzip und zstd erlauben Vorkompression. Eine allgemein beste Stufe folgt aus dieser Stichprobe nicht.

Macht HTTPS Kompression unbedenklich?

Nein. Beim BREACH-Prinzip liefern Unterschiede in der Länge komprimierter Antworten Hinweise auf geheime Werte. Dieses Risiko besteht, wenn Geheimnisse und angreiferkontrollierte Inhalte eine komprimierte Antwort teilen und wiederholte Antwortlängen beobachtbar sind. Gewöhnliches HTML-Escaping beseitigt diese Voraussetzung allein nicht. Je nach Anwendung helfen das Abschalten der Kompression für betroffene Antworten, die Trennung von Geheimnissen und zurückgesendeten Eingaben oder korrekt maskierte Tokens. TLS 1.3 entfernt TLS-Kompression, aber keine HTTP-Inhaltskodierung und deren Seitenkanalrisiken.

Wie lässt sich eine einzelne gzip-Antwort prüfen?

Der folgende curl-Befehl ist für ein neues leeres Arbeitsverzeichnis und eine kleine vertrauenswürdige HTTPS-Ressource gedacht. Das Laden einer curlrc ist abgeschaltet; automatische Dekodierung und Weiterleitungen sind nicht aktiviert:

curl -q --fail --silent --show-error --max-time 30 --max-filesize 10000000 --proto "=https" -H "Accept-Encoding: gzip" -D headers.txt -o body.bin -w "%{http_code}\n" https://example.com/

Vor dem Entpacken muss der ausgegebene Status 200 lauten und der endgültige Header genau Content-Encoding: gzip nennen. Vor der Auswertung der Größen muss anschließend der dekodierte Inhalt mit der erwarteten Ressource abgeglichen werden. Eine Weiterleitung, Sperrseite, fehlende Kodierung oder ein fehlerhafter curl-Abschluss ist keine gzip-Messung. Erst nach diesen Prüfungen:

gzip -t body.bin &&
gzip -dc body.bin > decoded.html &&
wc -c body.bin decoded.html

Der erste Befehl prüft die gzip-Integrität; die weiteren Befehle laufen nur bei Erfolg. Beide Bytezahlen gehören zur selben Antwort. Beim Entpacken können Daten stark wachsen; freier Speicherplatz und vertrauenswürdige Eingaben sind daher relevant. Fehlendes Content-Encoding ist ein Befund einer unkodierten Antwort und kein Anlass zum erzwungenen gzip-Entpacken. Andere Kodierungen benötigen den passenden Decoder.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Eine Frage oder eine Idee für ein Webprojekt? Schreib mir kurz, worum es geht. Das Formular nutzt reCAPTCHA zum Schutz vor Spam.

Kommentar schreiben

Randfälle, die der Artikel nicht behandelt, und Rückfragen zum Code sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.