Skip to content
mobius1qwe edited this page Oct 7, 2026 · 1 revision

Home > Plugins

Plugins

Important

Em desenvolvimento (1.3). Ainda não está numa versão lançada e pode mudar.

Em uma frase: na 1.3, cada recurso do servidor que não é rota (compressão, CORS, login, proteções...) é um componente separado, o plugin, que você liga ao servidor.

Você vai precisar: RAL 1.3 (branch 1.3-plugin).

Warning

Sem plugin, o servidor não comprime, não cifra, não manda CORS e não pede login. Ele só atende as rotas. Quem vem da 1.2 precisa pôr os plugins no lugar das propriedades que saíram do servidor (tabela no fim).

Como ligar

No formulário: arraste o plugin da paleta RAL - Plugins e escolha o servidor na propriedade Server.

No código:

uses RALContent, RALCORS;

var
  vGzip: TRALCompressPlugin;
  vCors: TRALCORSPlugin;
begin
  vGzip := TRALCompressPlugin.Create(Self);
  vGzip.Server := Servidor;                         // ou Servidor.AddPlugin(vGzip)

  vCors := TRALCORSPlugin.Create(Self);
  vCors.Options.AllowOrigin := 'https://meusite.com.br';
  vCors.Server := Servidor;
end;

A ordem em que você liga não importa: cada plugin tem uma prioridade (Priority) e roda na ordem certa sozinho. Enabled := False desliga sem desligar do servidor.

Os plugins

Plugin (unit) Para que serve Propriedades principais
TRALCompressPlugin (RALContent) comprime as respostas (gzip, deflate, zlib; brotli e zstd com o pacote deles) CompressType (ctNone = o que o cliente pedir), SkipCompressedTypes (não comprimir imagem, zip...)
TRALCriptoPlugin (RALContent) cifra o corpo com AES, entre RAL e RAL Key (a mesma no cliente); ver Criptografia
TRALLimitsPlugin (RALContent) limita o tamanho do pedido (responde 413) e grava corpos grandes em disco MaxRequestSize (bytes, 0 = sem limite), SpoolAbove
TRALJSONBodyPlugin (RALContent) transforma um corpo JSON {"nome":"Ana"} em parâmetros (GetField('nome')) —
TRALCORSPlugin (RALCORS) deixa páginas de outros sites chamarem a API pelo navegador Options.AllowOrigin (vazio = ninguém; * = todos), AllowCredentials, AllowHeaders, MaxAge
TRALWhiteListPlugin (RALSecurity) IPs sempre liberados (as proteções abaixo os ignoram) IPList, um por linha
TRALBlackListPlugin (RALSecurity) IPs sempre recusados (403) IPList
TRALBruteForcePlugin (RALSecurity) bloqueia o IP depois de N senhas erradas MaxTry, ExpirationTime (ms)
TRALFloodPlugin (RALSecurity) recusa (403) o IP que manda pedidos rápido demais Interval (ms entre pedidos)
TRALPathTraversalPlugin (RALSecurity) recusa (403) caminhos com ../ —
TRALSecurityHeadersPlugin (RALSecurity) cabeçalhos de segurança em toda resposta Headers (nosniff, frame, referrer, HSTS, CSP)
TRALConcurrencyPlugin (RALConcurrency) limita quantos pedidos rodam ao mesmo tempo; os demais esperam ou recebem 503 MaxConcurrent (0 = 2× processadores), MaxQueueWait (ms), RetryAfter
TRALSelfSignedPlugin (RALSelfSigned) cria, liga e renova sozinho um certificado HTTPS ver Certificado automático
autenticação: TRALServerBasicAuth, TRALServerJWTAuth, TRALServerDigest, TRALServerOAuth2 pedem login ver Autenticação

A autenticação também é plugin: a propriedade Authentication do servidor continua existindo e liga um deles; outros podem ser ligados com Server, e qualquer um que aceitar libera o pedido.

O que mudou da 1.2 para a 1.3

Na 1.2 (propriedade do servidor) Na 1.3 (plugin)
CompressType TRALCompressPlugin.CompressType
CriptoOptions.Key TRALCriptoPlugin.Key
MaxRequestSize TRALLimitsPlugin.MaxRequestSize
JSONBodyToParams TRALJSONBodyPlugin
CORSOptions TRALCORSPlugin.Options
Security.Options + rsoBruteForceProtection, Security.BruteForce TRALBruteForcePlugin
rsoFloodProtection, Security.FloodTimeInterval TRALFloodPlugin.Interval
rsoPathTransvBlackList TRALPathTraversalPlugin
Security.WhiteIPList / BlackIPList TRALWhiteListPlugin / TRALBlackListPlugin
SecurityHeaders TRALSecurityHeadersPlugin.Headers
HideErrorDetails continua no servidor

Warning

Um formulário (.dfm/.lfm) salvo na 1.2 com essas propriedades não abre na 1.3. Antes de abrir, apague as linhas delas no arquivo do formulário (abra como texto: clique direito > View as Text), ou abra e escolha Ignore para cada propriedade. Depois ligue os plugins. Ver Atualizar de versão.

Erros comuns

O que acontece Causa O que fazer
o navegador acusa erro de CORS sem TRALCORSPlugin, ou AllowOrigin vazio ligue o plugin e informe a origem
a resposta não vem comprimida sem TRALCompressPlugin, ou o cliente não pediu ligue o plugin
Property CompressType does not exist ao abrir o formulário formulário da 1.2 na 1.3 veja o aviso acima
503 com Retry-After a fila do TRALConcurrencyPlugin encheu aumente MaxConcurrent ou MaxQueueWait

Veja também

Clone this wiki locally