Repository navigation
motor advancedhttp
Home > Motor AdvancedHTTP 🚧
Important
Em desenvolvimento (2.0) e experimental. Não use em produção. A biblioteca por baixo tem defeitos conhecidos no Windows (veja abaixo).
Vale para a 2.0 · só Lazarus com FPC 3.3.1 ou mais novo · Nível: avançado
Em uma frase: servidor HTTP/1.1 sobre a biblioteca AdvancedHTTPServer (epoll no Linux, IOCP no Windows), para quem já roda o FPC de desenvolvimento (trunk).
Você vai precisar: o pacote AdvancedHTTPRAL (advancedhttpral.lpk), o código-fonte da
AdvancedHTTPServer (a pasta src) no caminho de unidades e o FPC 3.3.1 ou mais novo: a
biblioteca usa funções anônimas. Em qualquer outro compilador a unit do motor compila vazia
(o símbolo RALHasAnonMethods não existe) e o componente não aparece.
São da biblioteca, não do RAL, e foram observados no Windows; o Linux não foi verificado.
| Defeito | Efeito |
|---|---|
| requisições em keep-alive travam | a segunda requisição da mesma conexão pode ficar esperando |
| o corpo da resposta se perde em TLS | HTTPS devolve a resposta sem corpo |
corpo de requisição em chunked derruba o processo |
Transfer-Encoding: chunked na ida não é seguro |
Além disso, o desempenho é baixo (cerca de 2 mil pedidos por segundo no Windows), e a resposta em fluxo sobre TLS no Windows sai inteira (o motor não a faz ao vivo).
uses RALAdvancedHTTPServer;
Servidor := TRALAdvancedHTTPServer.Create(Self);
Servidor.Port := 8080;
Servidor.CreateRoute('ping', Tratador.Ping);
Servidor.Active := True;| propriedade | padrão | |
|---|---|---|
PoolCount |
0 | threads do laço de eventos e do grupo de tratadores (mínimo duas); 0 = uma por processador |
ConnectionTimeout |
30 | segundos que uma conexão em keep-alive pode ficar parada |
MaxBodySize |
32 MB | maior corpo de requisição; acima disso, a biblioteca responde 413 |
TcpNoDelay |
verdadeiro | liga TCP_NODELAY nas conexões (a biblioteca não liga e responde em dois envios) |
SSL |
desligado |
CertFile e KeyFile em PEM, a chave sem senha |
Só um servidor ativo por processo: a biblioteca guarda a bandeira de parada numa variável global. Ativar um segundo levanta uma exceção. Para trocar de porta, pare o primeiro antes.
Não há cliente AdvancedHTTP. Use o fpHTTP (EngineType := 'fpHTTP') ou outro motor de cliente.
Para experimentar. Para um servidor no Lazarus de verdade, use o fpHTTP ou o mORMot2.
| O que acontece | Causa | O que fazer |
|---|---|---|
| o componente não existe | FPC abaixo do 3.3.1 | use o FPC 3.3.1+ ou outro motor |
| exceção ao ativar o segundo servidor | um servidor por processo | pare o primeiro |
| HTTPS responde sem corpo no Windows | defeito da biblioteca | use o Linux, ou outro motor |
| a conexão trava na segunda requisição no Windows | defeito de keep-alive da biblioteca | feche a conexão a cada pedido, ou use outro motor |
- Qual motor escolher?, Resposta em fluxo.
- Exemplo:
Lazarus/Console/AdvancedHttpExampleno repositório PascalRAL-Samples.
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
E-mail 🚧
- Mensagens 🚧
- Enviar 🚧
- Receber 🚧
- Ler a caixa postal 🚧
- Verificar o que chega 🚧
- Servir caixas postais 🚧
- S/MIME 🚧
- OpenPGP 🚧
Chatbot 🚧
Cliente
Motores
- Qual motor escolher?
- Compatibilidade
- Recursos
- QUIC
- Motor NgHttp2 (HTTP/2) 🚧
- Motor XSocket 🚧
- Motor AdvancedHTTP (experimental) 🚧
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