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

Home > Servir site e arquivos

Servir site e arquivos (TRALWebModule)

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.

Ligar

Coloque um TRALWebModule (paleta RAL - Modules) e:

RALWebModule1.Server := Servidor;
RALWebModule1.DocumentRoot := 'www';   // pasta "www" ao lado do executável

Com 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).

Propriedades

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.

Sessões

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.

Erros comuns

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)

Veja também

Clone this wiki locally