Compressão HTTP

Suportado por

TsgcWebSocketHTTPServer

HTTPCompression comprime as respostas HTTP/1.1 com gzip ou deflate antes de serem enviadas ao cliente, quando o cliente anuncia suporte a isso usando o cabeçalho de requisição Accept-Encoding. Aplica-se tanto aos arquivos estáticos servidos a partir de DocumentRoot quanto às respostas que você mesmo cria em OnCommandGet. Está desabilitado por padrão, de modo que as aplicações existentes não são afetadas até que você o ative.

Este é um recurso diferente de Compressão, que comprime mensagens WebSocket utilizando o protocolo PerMessage_Deflate. HTTPCompression afeta apenas requisições e respostas HTTP/1.1 simples; não tem efeito no tráfego WebSocket, e Compressão não tem efeito nas respostas HTTP.

Para habilitá-lo, defina:

HTTPCompression / Enabled

Você também pode ajustá-lo:

Level — nível de compressão de 0 (nenhum) a 9 (máximo); padrão 6.

MinSize — respostas menores que este valor, em bytes, não são comprimidas; padrão 1024.

Algorithms — quais codificações o servidor pode utilizar; padrão gzip e deflate. Quando o cliente aceita ambos, gzip é preferido.

ContentTypes — lista de tipos de conteúdo elegíveis para compressão, curingas como "text/*" são suportados; o padrão são os tipos comuns de texto, JSON, JavaScript, XML e SVG.

O servidor negocia a codificação a partir do cabeçalho Accept-Encoding da requisição, respeitando um valor de qualidade 0 como recusa (por exemplo "gzip;q=0"). Ele nunca comprime uma resposta que já possui um Content-Encoding, um status 204/304/1xx, um stream de Server-Sent Events, ou um corpo que não ficaria menor. Quando comprime, define o cabeçalho Content-Encoding da resposta e adiciona Vary: Accept-Encoding para que os caches indexem corretamente pela codificação.

Atualmente, HTTPCompression aplica-se somente a respostas HTTP/1.1; as respostas HTTP/2 não são comprimidas por esta propriedade. Se você comprimir conteúdo que combina um segredo (como um token CSRF) com dados influenciados pelo atacante em uma conexão TLS, esteja ciente de que a compressão de resposta é o que torna possível o ataque da classe BREACH; esta é uma característica geral da compressão HTTP, não algo específico desta implementação.


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