Ondersteund door
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;