Catalog · How the catalog works
horse-compression-v2
Middleware oficial de compressão de alta performance para o ecossistema Horse, com suporte a Gzip, Deflate e Brotli.
- ★ 7 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Horse Compression v2
Novo Middleware Oficial de Compressão de Alta Performance para o ecossistema Horse, oferecendo suporte a Gzip, Deflate e Brotli.
Esta versão foi redesenhada sob princípios de alta performance, minimizando alocações de memória no heap (zero-allocation) e garantindo compatibilidade total com providers assíncronos como IOCP e epoll.
⚙️ Instalação
Para adicionar o middleware ao seu projeto, utilize o gerenciador de dependências Boss:
boss install regyssilveira/horse-compression-v2⚡️ Quickstart
Registrar o middleware de compressão globalmente no seu servidor Horse é extremamente simples:
uses
Horse,
Horse.Compression;
begin
// O middleware interceptará as respostas e aplicará a compressão
THorse.Use(Compression);
THorse.Get('/ping',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send('{"message": "pong"}');
end);
THorse.Listen(9000);
end.💡 Suporte a Brotli (br)
Para manter o middleware 100% autossuficiente e portável por padrão para Delphi e Lazarus/FPC:
- Gzip e Deflate estão ativos por padrão, usando as bibliotecas padrão do compilador (
System.ZLibno Delphi epaszlibno FPC). - Brotli é compilado de forma opcional. Para ativá-lo, você deve adicionar a diretiva condicional de compilação
HORSE_COMPRESSION_BROTLInas configurações do seu projeto Delphi/Lazarus ou diretamente no código-fonte:
{$DEFINE HORSE_COMPRESSION_BROTLI}[!NOTE] Quando a diretiva
HORSE_COMPRESSION_BROTLIestá ativa, o middleware buscará as libs dinâmicas do Brotli (brotlienc.dll/libbrotlienc.so/libbrotlienc.dylib) em tempo de execução ou realizará o vínculo estático, dependendo da plataforma. Caso o cliente solicite Brotli (Accept-Encoding: br) e a diretiva não esteja definida, o servidor fará fallback automático paragzipoudeflate.
🔍 Como funciona a Compressão Inteligente
O middleware analisa a requisição e a resposta do servidor para determinar se a compressão deve ocorrer:
- Negociação de Conteúdo (
Accept-Encoding): O middleware lê a requisição enviada pelo cliente. Se o cliente suportarbr,gzipoudeflate(nesta ordem de preferência), o algoritmo correspondente é selecionado. - Filtro de Status Code: A compressão é ignorada para códigos de status HTTP que não devem conter corpo, como
204 No Contentou304 Not Modified. - Filtro de Mime-Type (Content-Type): A compressão é realizada apenas em conteúdos textuais ou baseados em texto. Arquivos binários como imagens (
PNG,JPEG), PDFs ou arquivos compactados (ZIP,RAR) são ignorados de forma transparente. - Cabeçalhos de Resposta: As respostas comprimidas incluem os cabeçalhos apropriados:
Content-Encoding: O algoritmo de compressão utilizado (gzip,deflate,br).Vary: Accept-Encoding: Informa aos servidores de proxy e CDNs (como Cloudflare) que o conteúdo armazenado em cache varia com base no suporte de codificação do navegador cliente.
📄 Licença
Este projeto está licenciado sob a Apache License 2.0.

