Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

horse-compression-v2

Middleware oficial de compressão de alta performance para o ecossistema Horse, com suporte a Gzip, Deflate e Brotli.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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:

bash
boss install regyssilveira/horse-compression-v2

⚡️ Quickstart

Registrar o middleware de compressão globalmente no seu servidor Horse é extremamente simples:

delphi
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.ZLib no Delphi e paszlib no FPC).
  • Brotli é compilado de forma opcional. Para ativá-lo, você deve adicionar a diretiva condicional de compilação HORSE_COMPRESSION_BROTLI nas configurações do seu projeto Delphi/Lazarus ou diretamente no código-fonte:
delphi
{$DEFINE HORSE_COMPRESSION_BROTLI}

[!NOTE] Quando a diretiva HORSE_COMPRESSION_BROTLI está 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 para gzip ou deflate.


🔍 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:

  1. Negociação de Conteúdo (Accept-Encoding): O middleware lê a requisição enviada pelo cliente. Se o cliente suportar br, gzip ou deflate (nesta ordem de preferência), o algoritmo correspondente é selecionado.
  2. Filtro de Status Code: A compressão é ignorada para códigos de status HTTP que não devem conter corpo, como 204 No Content ou 304 Not Modified.
  3. 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.
  4. 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.