Compression HTTP

Pris en charge par

TsgcWebSocketHTTPServer

HTTPCompression compresse les réponses HTTP/1.1 avec gzip ou deflate avant leur envoi au client, lorsque le client annonce la prise en charge via l'en-tête de requête Accept-Encoding. Cela s'applique à la fois aux fichiers statiques servis depuis DocumentRoot et aux réponses que vous construisez vous-même dans OnCommandGet. C'est désactivé par défaut, de sorte que les applications existantes ne sont pas affectées tant que vous ne l'activez pas.

Il s'agit d'une fonctionnalité différente de Compression, qui compresse les messages WebSocket à l'aide du protocole PerMessage_Deflate. HTTPCompression n'affecte que les requêtes et réponses HTTP/1.1 simples ; elle n'a aucun effet sur le trafic WebSocket, et Compression n'a aucun effet sur les réponses HTTP.

Pour l'activer, définissez :

HTTPCompression / Enabled

Vous pouvez également l'ajuster :

Level — niveau de compression de 0 (aucune) à 9 (maximum) ; par défaut 6.

MinSize — les réponses plus petites que cette valeur, en octets, ne sont pas compressées ; par défaut 1024.

Algorithms — quels encodages le serveur est autorisé à utiliser ; par défaut à la fois gzip et deflate. Lorsque le client accepte les deux, gzip est préféré.

ContentTypes — liste des types de contenu éligibles à la compression, les jokers comme "text/*" sont pris en charge ; par défaut, les types courants text, JSON, JavaScript, XML et SVG.

Le serveur négocie l'encodage à partir de l'en-tête Accept-Encoding de la requête, en honorant une valeur de qualité de 0 comme un refus (par exemple "gzip;q=0"). Il ne compresse jamais une réponse qui possède déjà un Content-Encoding, un statut 204/304/1xx, un flux Server-Sent Events, ou un corps qui ne finirait pas plus petit. Lorsqu'il compresse, il définit l'en-tête Content-Encoding de la réponse et ajoute Vary: Accept-Encoding afin que les caches indexent correctement selon l'encodage.

HTTPCompression s'applique actuellement uniquement aux réponses HTTP/1.1 ; les réponses HTTP/2 ne sont pas compressées par cette propriété. Si vous compressez du contenu qui mêle un secret (tel qu'un jeton CSRF) à des données influencées par un attaquant sur une connexion TLS, sachez que la compression des réponses est ce qui rend possible la classe d'attaques BREACH ; il s'agit d'une propriété générale de la compression HTTP, et non de quelque chose de spécifique à cette implémentation.


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