Suportado por
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 a arquivos estáticos servidos a partir de DocumentRoot quanto a respostas que você mesmo constrói em OnCommandGet. Está desativado por padrão, portanto as aplicações existentes não são afetadas até que você o ative.
Este é um recurso diferente de Compression, que comprime mensagens WebSocket usando o protocolo PerMessage_Deflate. HTTPCompression afeta somente requisições e respostas HTTP/1.1 simples; não tem efeito sobre o tráfego WebSocket, e Compression não tem efeito sobre respostas HTTP.
Para habilitá-lo, defina:
HTTPCompression / Enabled
Você também pode ajustá-lo:
Level — nível de compressão de 0 (nenhuma) a 9 (máxima); 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 tem permissão de usar; por padrão tanto gzip quanto deflate. Quando o cliente aceita ambas, o gzip é preferido.
ContentTypes — lista de tipos de conteúdo elegíveis para compressão; wildcards como "text/*" são suportados; o padrão inclui os tipos comuns text, 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 uma recusa (por exemplo "gzip;q=0"). Ele nunca comprime uma resposta que já tem um Content-Encoding, um status 204/304/1xx, um stream de Server-Sent Events, ou um corpo que não ficaria menor. Quando comprime, ele define o cabeçalho Content-Encoding da resposta e adiciona Vary: Accept-Encoding para que os caches indexem corretamente pela codificação.
HTTPCompression atualmente se aplica apenas a respostas HTTP/1.1; respostas HTTP/2 não são comprimidas por esta propriedade. Se você comprimir conteúdo que mistura um segredo (como um token CSRF) com dados influenciados por um atacante em uma conexão TLS, saiba que a compressão de respostas é o que torna possível a classe de ataques BREACH; esta é uma propriedade 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;