Cliente HTTP/3 Delphi | Componentes QUIC & WebTransport | eSeGeCe

Cliente HTTP/3 Delphi — QUIC e WebTransport para Pascal

Uma pilha HTTP/3 funcional para Delphi e C++Builder: TsgcHTTP3Client envia requisições RFC 9114 sobre QUIC com compressão de cabeçalhos QPACK, descoberta via Alt-Svc, server push e túneis Extended CONNECT. Componentes de transporte QUIC puro e sessões WebTransport fazem parte do mesmo pacote, e um servidor HTTP/3 completa o quadro.

A mesma semântica HTTP, um novo transporte

O HTTP/3 (RFC 9114) mantém os métodos, códigos de status e cabeçalhos que você já conhece e substitui o TCP pelo QUIC, um transporte baseado em UDP com TLS 1.3 embutido.

Um cliente HTTP/3 Delphi dá à sua aplicação o transporte para o qual a web moderna está migrando. O QUIC (RFC 9000) combina os handshakes de transporte e TLS em um único voo, elimina o head-of-line blocking no nível do transporte (um pacote perdido só atrasa os streams cujos dados ele carregava) e sobrevive a mudanças de rede por meio de connection IDs, então uma conexão pode acompanhar um dispositivo do Wi-Fi para os dados móveis. Os cabeçalhos são comprimidos com QPACK (RFC 9204), o substituto do HPACK no HTTP/3.

O sgcWebSockets aciona o QUIC através do suporte QUIC nativo do OpenSSL 3.5. O engine é detectado automaticamente quando a biblioteca OpenSSL carrega: com os binários OpenSSL 3.5 fornecidos você obtém o engine qmBuiltin, que suporta múltiplos streams por conexão e é o engine em torno do qual os componentes foram construídos. Existe um caminho qmCustom para builds OpenSSL no estilo quictls, limitado a um único stream por conexão.

Cliente HTTP/3

TsgcHTTP3Client: requisições bloqueantes e assíncronas, Alt-Svc, push, túneis

Servidor HTTP/3

TsgcHTTP3Server: atende requisições sobre QUIC, descende de TsgcQUICServer

QUIC puro

TsgcQUICClient / TsgcQUICServer: streams QUIC sem semântica HTTP

Padrões

RFC 9000 (QUIC), RFC 9114 (HTTP/3), RFC 9204 (QPACK), RFC 9220 (Extended CONNECT)

O que o cliente HTTP/3 pode fazer

Dez métodos HTTP, mais a maquinaria específica do HTTP/3 exposta como eventos e métodos.

Todos os verbos

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT e o novo método IETF QUERY, cada um como chamada bloqueante, a maioria também com variante assíncrona.

Descoberta via Alt-Svc

Servidores anunciam a disponibilidade de HTTP/3 pelo cabeçalho Alt-Svc (RFC 7838). O cliente o interpreta e o expõe pelo evento OnAltSvc, então sua aplicação decide quando trocar.

Server push

O cliente mantém o controle das respostas empurradas: anuncie um limite com SetMaxPushId, seja notificado por OnPushPromise e recuse com CancelPush.

Extended CONNECT

O RFC 9220 tunela outro protocolo por um stream de requisição. ExtendedConnect abre o túnel quando o servidor anuncia suporte; depois TunnelSend e OnTunnelData movem os bytes.

WebTransport

Sessões negociadas sobre Extended CONNECT que entregam streams QUIC diretamente à aplicação, feitas para tráfego bidirecional de baixa latência. Baseado em streams; datagramas não são transportados no engine QUIC fornecido.

Compressão QPACK

Compressão de cabeçalhos RFC 9204 projetada para a entrega fora de ordem do QUIC, com atualizações de tabela dinâmica transportadas em streams dedicados de encoder e decoder.

Handshake com suporte a 0-RTT

O QUIC combina transporte e TLS 1.3 em um único voo; uma conexão nova completa em uma única viagem de ida e volta e uma sessão retomada pode carregar dados 0-RTT no primeiro voo.

Migração de conexão

Conexões QUIC são identificadas por connection ID em vez da quádrupla de endereços, então sobrevivem à troca de rede do cliente.

Múltiplos streams

No engine builtin, EnableMultiStream e OpenStream colocam vários streams QUIC independentes em uma conexão, a fundação sobre a qual o WebTransport é construído.

Uma requisição GET sobre HTTP/3

Conecte a um host e porta, depois emita requisições. A porta padrão é 443.

var
  oClient: TsgcHTTP3Client;
  vBody: string;
begin
  oClient := TsgcHTTP3Client.Create(nil);
  oClient.OnResponse := OnResponseHandler;
  oClient.OnAltSvc   := OnAltSvcHandler;

  oClient.Connect('www.example.com', 443);
  vBody := oClient.Get('https://www.example.com/');
  oClient.Disconnect;
end;
TsgcHTTP3Client* oClient = new TsgcHTTP3Client(NULL);
oClient->OnResponse = OnResponseHandler;
oClient->OnAltSvc   = OnAltSvcHandler;

oClient->Connect("www.example.com", 443);
String vBody = oClient->Get("https://www.example.com/");
oClient->Disconnect();
var oClient = new TsgcHTTP3Client();
oClient.OnResponse += OnResponseHandler;
oClient.OnAltSvc   += OnAltSvcHandler;

oClient.Connect("www.example.com", 443);
var vBody = oClient.Get("https://www.example.com/");
oClient.Disconnect();

Um servidor HTTP/3 em Delphi

O servidor faz bind em uma porta UDP, carrega certificado e chave, e dispara um evento para cada requisição. O suporte a HTTP/3 também está disponível no lado servidor HTTP da biblioteca.

var
  oServer: TsgcHTTP3Server;
begin
  oServer := TsgcHTTP3Server.Create(nil);
  oServer.Port := 443;
  oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
  oServer.QUICOptions.SSLOptions.KeyFile  := 'key.pem';
  oServer.OnH3Request := OnH3RequestHandler;
end;

Requisitos de edição e runtime

HTTP/3, QUIC e WebTransport são exclusivos da edição All-Access. Os componentes exigem o núcleo da biblioteca baseado em Indy e OpenSSL 3.5 ou posterior, que fornece o suporte QUIC nativo sobre o qual eles são construídos.

O WebTransport exige adicionalmente o engine QUIC builtin do OpenSSL (qmBuiltin), porque uma sessão precisa de vários streams em uma conexão QUIC. Os componentes de servidor também rodam apenas no engine builtin. Como um cliente não pode presumir que um servidor fala HTTP/3, mantenha o cliente HTTP/2 à mão para origens que só anunciam h2. O evento Alt-Svc avisa quando o HTTP/3 está disponível.

Para se aprofundar

Cliente & servidor HTTP/2 Delphi

O irmão baseado em TCP: streams multiplexados, HPACK, server push e WebSocket-sobre-HTTP/2.

Componentes HTTP

A família HTTP completa: HTTP/2, OAuth2, JWT, gRPC, serviços de push e mais.

Guia de comparação Delphi

Como o sgcWebSockets se compara a outras bibliotecas de rede Delphi, com fontes citadas.

Componente WebSocket

WebSocket sobre HTTP/3 e QUIC (RFC 9220), HTTP/2 (RFC 8441) e HTTP/1.1 (RFC 6455).

Blog: O método HTTP QUERY

O novo verbo IETF nos clientes HTTP/1.1, HTTP/2 e HTTP/3, com código.

Edições

O que cada edição do sgcWebSockets inclui, da Standard à All-Access.

Best value: All-AccessEvery eSeGeCe product, Premium Support included, from €1,059/year.
See All-Access pricing

Experimente HTTP/3 no Delphi hoje

Baixe o trial e rode o cliente HTTP/3 contra seu próprio servidor ou qualquer origem com HTTP/3 habilitado.