Repository navigation
plugins
Home > 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).
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 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.
| 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
|
- Segurança para produção
- Criar um plugin (avançado)
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar