Repository navigation
web module
Home > Servir site e arquivos
Desde a 1.0 · cache, faixas e página índice:
1.2 🚧· Nível: iniciante
Em uma frase: o TRALWebModule entrega os arquivos de uma pasta (HTML, CSS,
JS, imagens, PDF) pelo mesmo servidor da sua API.
Coloque um TRALWebModule (paleta RAL - Modules) e:
RALWebModule1.Server := Servidor;
RALWebModule1.DocumentRoot := 'www'; // pasta "www" ao lado do executávelCom www\index.html e www\css\site.css, os endereços ficam
http://localhost:8000/ e http://localhost:8000/css/site.css.
Warning
Desde a 1.2 🚧, DocumentRoot vazio não serve nada. Antes servia a pasta do
executável inteira, com .ini, certificados e banco. Se dependia disso,
UseApplicationPathAsRoot := True traz o comportamento antigo (não recomendado).
| Propriedade | Padrão | O que faz |
|---|---|---|
DocumentRoot |
vazio | a pasta servida. Relativa = ao lado do executável |
Domain |
vazio | prefixo: com site, os arquivos ficam em /site/.... Desde a 1.2 🚧 o módulo só responde dentro dele |
IndexFile 1.2 🚧
|
index.html |
o arquivo do endereço raiz |
BlockedExtensions 1.2 🚧
|
vazio | extensões nunca servidas, uma por linha (ini, db, key) |
FollowLinks 1.2 🚧
|
ligado |
False recusa arquivos alcançados por atalho/link simbólico |
CacheControl 1.2 🚧
|
vazio | cache no navegador por extensão: css=max-age=31536000, html=no-cache, *=...
|
ServePrecompressed 1.2 🚧
|
desligado | entrega site.css.br / site.css.gz prontos, se existirem |
MaxFileSize 1.2 🚧
|
0 (sem limite) | arquivo maior que isso é tratado como inexistente |
FileCacheTime 1.2 🚧
|
0 | ms que o módulo lembra se um arquivo existe (menos disco, vê mudanças mais tarde) |
SessionTimeout |
30 min (ms) | validade de uma sessão parada |
Routes |
vazio | rotas suas dentro do módulo |
Sozinho, desde a 1.2 🚧: ETag e Last-Modified (o navegador recebe 304 e não
baixa de novo), pedaços de arquivo (Range, para vídeo e downloads retomáveis),
HEAD, e o arquivo é lido do disco aos poucos em vez de inteiro na memória.
Para guardar algo por visitante (carrinho, usuário logado numa página):
procedure TForm1.Carrinho(ARequest: TRALRequest; AResponse: TRALResponse);
var
vSessao: TRALWebSession;
begin
vSessao := RALWebModule1.OpenSession(ARequest, AResponse); // acha ou cria (envia o cookie)
if vSessao.Objects['carrinho'] = nil then
vSessao.Objects['carrinho'] := TStringList.Create; // a sessão libera ao expirar
TStringList(vSessao.Objects['carrinho']).Add(ARequest.GetQuery('item'));
AResponse.Answer(HTTP_OK, '{"ok":true}');
end;RALWebModule1.Session[ARequest] só procura (devolve nil se não houver). O cookie
da sessão vai HttpOnly, SameSite=Lax e Secure sob HTTPS.
| O que acontece | Causa | O que fazer |
|---|---|---|
| 404 em tudo |
DocumentRoot vazio (1.2 🚧), ou pasta errada |
aponte para a pasta certa |
| 404 num arquivo que existe | extensão em BlockedExtensions, MaxFileSize, ou fora do Domain
|
confira as três |
| o navegador mostra versão antiga | cache |
CacheControl com no-cache para html
|
.js recusado pelo navegador (nosniff) |
tipo MIME desconhecido |
AddMIMEType (unit RALMIMETypes) |
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