Client HTTP/3 Delphi | Componenti QUIC e WebTransport | eSeGeCe

Client HTTP/3 Delphi — QUIC e WebTransport per Pascal

Uno stack HTTP/3 funzionante per Delphi e C++Builder: TsgcHTTP3Client invia richieste RFC 9114 su QUIC con compressione degli header QPACK, scoperta Alt-Svc, server push e tunnel Extended CONNECT. I componenti di trasporto QUIC raw e le sessioni WebTransport fanno parte dello stesso pacchetto, e un server HTTP/3 completa il quadro.

Stesse semantiche HTTP, nuovo trasporto

HTTP/3 (RFC 9114) mantiene i metodi, gli status code e gli header che già conosci e sostituisce TCP con QUIC, un trasporto basato su UDP con TLS 1.3 integrato.

Un client HTTP/3 Delphi dà alla tua applicazione il trasporto verso cui si sta muovendo il web moderno. QUIC (RFC 9000) combina gli handshake di trasporto e TLS in un solo scambio, elimina l'head-of-line blocking a livello di trasporto (un pacchetto perso blocca solo gli stream di cui trasportava i dati) e sopravvive ai cambi di rete grazie ai connection ID, così una connessione può seguire un dispositivo dal Wi-Fi alla rete mobile. Gli header sono compressi con QPACK (RFC 9204), il sostituto HTTP/3 di HPACK.

sgcWebSockets pilota QUIC attraverso il supporto QUIC nativo di OpenSSL 3.5. L'engine viene rilevato automaticamente al caricamento della libreria OpenSSL: con i binari OpenSSL 3.5 forniti ottieni l'engine qmBuiltin, che supporta più stream per connessione ed è l'engine attorno a cui i componenti sono costruiti. Esiste un percorso qmCustom per le build OpenSSL in stile quictls, limitato a un solo stream per connessione.

Client HTTP/3

TsgcHTTP3Client: richieste bloccanti e asincrone, Alt-Svc, push, tunnel

Server HTTP/3

TsgcHTTP3Server: serve richieste su QUIC, discende da TsgcQUICServer

QUIC raw

TsgcQUICClient / TsgcQUICServer: stream QUIC senza semantiche HTTP

Standard

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

Cosa può fare il client HTTP/3

Dieci metodi HTTP, più la meccanica specifica di HTTP/3 esposta come eventi e metodi.

Tutti i verbi

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT e il nuovo metodo IETF QUERY, ciascuno come chiamata bloccante, la maggior parte anche con variante asincrona.

Scoperta Alt-Svc

I server annunciano la disponibilità di HTTP/3 tramite l'header Alt-Svc (RFC 7838). Il client lo interpreta e lo espone tramite OnAltSvc, così è la tua applicazione a decidere quando passare.

Server push

Il client mantiene il controllo delle risposte push: annuncia un limite con SetMaxPushId, ricevi la notifica tramite OnPushPromise e rifiuta con CancelPush.

Extended CONNECT

RFC 9220 incanala un altro protocollo attraverso uno stream di richiesta. ExtendedConnect apre il tunnel quando il server ne annuncia il supporto; poi TunnelSend e OnTunnelData muovono i byte.

WebTransport

Sessioni negoziate su Extended CONNECT che consegnano all'applicazione stream QUIC diretti, pensate per traffico bidirezionale a bassa latenza. Basate su stream; i datagrammi non sono trasportati sull'engine QUIC fornito.

Compressione QPACK

Compressione degli header RFC 9204 progettata per la consegna fuori ordine di QUIC, con aggiornamenti della tabella dinamica trasportati su stream encoder e decoder dedicati.

Handshake con supporto 0-RTT

QUIC combina trasporto e TLS 1.3 in un solo scambio; una connessione nuova si completa in un singolo round trip e una sessione ripresa può trasportare dati 0-RTT nel primo scambio.

Migrazione della connessione

Le connessioni QUIC sono identificate dal connection ID anziché dalla quadrupla di indirizzi, quindi sopravvivono al cambio di rete del client.

Stream multipli

Sull'engine builtin, EnableMultiStream e OpenStream mettono più stream QUIC indipendenti su una sola connessione, la base su cui è costruito WebTransport.

Una richiesta GET su HTTP/3

Connettiti a un host e a una porta, poi invia le richieste. La porta di default è la 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();

Un server HTTP/3 in Delphi

Il server fa il bind di una porta UDP, carica certificato e chiave, e solleva un evento per ogni richiesta. Il supporto HTTP/3 è disponibile anche sul lato server HTTP della libreria.

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;

Requisiti di edizione e runtime

HTTP/3, QUIC e WebTransport sono esclusivi dell'edizione All-Access. I componenti richiedono il core della libreria basato su Indy e OpenSSL 3.5 o successivo, che fornisce il supporto QUIC nativo su cui sono costruiti.

WebTransport richiede inoltre l'engine QUIC builtin di OpenSSL (qmBuiltin), perché una sessione ha bisogno di più stream su una sola connessione QUIC. Anche i componenti server girano solo sull'engine builtin. Poiché un client non può dare per scontato che un server parli HTTP/3, tieni a portata di mano il client HTTP/2 per le origin che annunciano solo h2. L'evento Alt-Svc ti dice quando HTTP/3 è disponibile.

Approfondimenti

Client & server HTTP/2 Delphi

Il fratello basato su TCP: stream multiplexati, HPACK, server push e WebSocket-over-HTTP/2.

Componenti HTTP

La famiglia HTTP completa: HTTP/2, OAuth2, JWT, gRPC, servizi push e altro.

Guida comparativa Delphi

Come sgcWebSockets si confronta con le altre librerie di rete Delphi, con fonti citate.

Componente WebSocket

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

Blog: il metodo HTTP QUERY

Il nuovo verbo IETF nei client HTTP/1.1, HTTP/2 e HTTP/3, con codice.

Edizioni

Cosa include ogni edizione di sgcWebSockets, da Standard ad All-Access.

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

Prova HTTP/3 da Delphi oggi stesso

Scarica la trial ed esegui il client HTTP/3 contro il tuo server o qualunque origin con HTTP/3 abilitato.