HTTP-compressie

Ondersteund door

TsgcWebSocketHTTPServer

HTTPCompression comprimeert HTTP/1.1-antwoorden met gzip of deflate voordat ze naar de client worden verzonden, wanneer de client hiervoor ondersteuning aangeeft via de aanvraagheader Accept-Encoding. Dit geldt zowel voor statische bestanden die vanuit DocumentRoot worden geserveerd als voor antwoorden die u zelf opbouwt in OnCommandGet. Het is standaard uitgeschakeld, dus bestaande toepassingen worden niet beïnvloed totdat u het inschakelt.

Dit is een andere functie dan Compression, die WebSocket-berichten comprimeert met het PerMessage_Deflate-protocol. HTTPCompression heeft alleen invloed op gewone HTTP/1.1-verzoeken en -antwoorden; het heeft geen effect op WebSocket-verkeer, en Compression heeft geen effect op HTTP-antwoorden.

Om dit in te schakelen, stelt u het volgende in:

HTTPCompression / Enabled

U kunt het ook fijnregelen:

Level — compressieniveau van 0 (geen) tot 9 (maximum); standaard 6.

MinSize — antwoorden die kleiner zijn dan deze waarde, in bytes, worden niet gecomprimeerd; standaard 1024.

Algorithms — welke encodings de server mag gebruiken; standaard zowel gzip als deflate. Wanneer de client beide accepteert, heeft gzip de voorkeur.

ContentTypes — lijst met contenttypes die voor compressie in aanmerking komen, jokertekens zoals "text/*" worden ondersteund; standaard de gangbare text-, JSON-, JavaScript-, XML- en SVG-types.

De server onderhandelt de codering op basis van de Accept-Encoding-header van het verzoek, waarbij een kwaliteitswaarde van 0 als een weigering wordt opgevat (bijvoorbeeld "gzip;q=0"). Hij comprimeert nooit een respons die al een Content-Encoding heeft, een status 204/304/1xx, een Server-Sent Events-stream, of een body die er niet kleiner van zou worden. Wanneer hij wel comprimeert, stelt hij de Content-Encoding-header van de respons in en voegt hij Vary: Accept-Encoding toe zodat caches correct op de codering indexeren.

HTTPCompression geldt momenteel alleen voor HTTP/1.1-responses; HTTP/2-responses worden niet door deze eigenschap gecomprimeerd. Als u inhoud comprimeert waarin een geheim (zoals een CSRF-token) wordt gemengd met door een aanvaller beïnvloede data over een TLS-verbinding, houd er dan rekening mee dat responscompressie is wat de BREACH-klasse van aanvallen mogelijk maakt; dit is een algemene eigenschap van HTTP-compressie, niet iets dat specifiek is voor deze implementatie.


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