HTTP-Komprimierung

Unterstützt von

TsgcWebSocketHTTPServer

HTTPCompression komprimiert HTTP/1.1-Antworten mit gzip oder deflate, bevor sie an den Client gesendet werden, wenn der Client dies über den Anfrage-Header Accept-Encoding signalisiert. Dies gilt sowohl für statische, aus DocumentRoot bereitgestellte Dateien als auch für Antworten, die Sie selbst in OnCommandGet aufbauen. Standardmäßig ist es deaktiviert, sodass bestehende Anwendungen erst betroffen sind, wenn Sie es einschalten.

Dies ist eine andere Funktion als Compression, die WebSocket-Nachrichten mit dem PerMessage_Deflate-Protokoll komprimiert. HTTPCompression wirkt sich nur auf reine HTTP/1.1-Anfragen und -Antworten aus; es hat keine Auswirkung auf WebSocket-Verkehr, und Compression hat keine Auswirkung auf HTTP-Antworten.

Um es zu aktivieren, setzen Sie:

HTTPCompression / Enabled

Sie können es auch feinabstimmen:

Level — Komprimierungsstufe von 0 (keine) bis 9 (maximal); Standard 6.

MinSize — Antworten, die kleiner sind als dieser Wert in Bytes, werden nicht komprimiert; Standard 1024.

Algorithms — welche Kodierungen der Server verwenden darf; Standard sind sowohl gzip als auch deflate. Akzeptiert der Client beide, wird gzip bevorzugt.

ContentTypes — Liste der Content-Types, die für Komprimierung in Frage kommen, Platzhalter wie „text/*" werden unterstützt; Standard sind die gängigen Text-, JSON-, JavaScript-, XML- und SVG-Typen.

Der Server handelt die Kodierung anhand des Accept-Encoding-Headers der Anfrage aus und behandelt einen Qualitätswert von 0 als Ablehnung (zum Beispiel "gzip;q=0"). Er komprimiert nie eine Antwort, die bereits ein Content-Encoding hat, einen 204/304/1xx-Status, einen Server-Sent-Events-Stream oder einen Body, der dadurch nicht kleiner würde. Wenn er komprimiert, setzt er den Header Content-Encoding der Antwort und fügt Vary: Accept-Encoding hinzu, damit Caches korrekt nach der Kodierung unterscheiden.

HTTPCompression gilt derzeit nur für HTTP/1.1-Antworten; HTTP/2-Antworten werden durch diese Eigenschaft nicht komprimiert. Wenn Sie Inhalte komprimieren, die ein Geheimnis (etwa ein CSRF-Token) mit von einem Angreifer beeinflussten Daten über eine TLS-Verbindung vermischen, beachten Sie, dass Antwortkompression die BREACH-Angriffsklasse überhaupt erst ermöglicht; dies ist eine allgemeine Eigenschaft der HTTP-Kompression, nichts, das dieser Implementierung eigen ist.


oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.DocumentRoot := 'C:\inetpub\wwwroot';
oServer.HTTPCompression.Enabled := true;
oServer.HTTPCompression.MinSize := 1024;
oServer.Active := true;