Home > Plugins
[!IMPORTANT]
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Em uma frase: na 2.0, 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 2.0 (branch 2.0).
[!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).
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.
| 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.
| Na 1.2 (propriedade do servidor) | Na 2.0 (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
2.0. 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.
| 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 2.0 | veja o aviso acima |
503 com Retry-After |
a fila do TRALConcurrencyPlugin encheu |
aumente MaxConcurrent ou MaxQueueWait |
Wiki: Home
Wiki: _Sidebar
Wiki: atualizacao
Wiki: autenticacao
Wiki: broker mqtt
Wiki: certificado automatico
Wiki: criar plugin
Wiki: criptografia externa
Wiki: desempenho
Wiki: o que e
Wiki: pedido resposta
Wiki: problemas comuns
Wiki: recursos
Wiki: roadmap
Wiki: rotas
Wiki: seguranca