Client HTTP/3 Delphi | Composants QUIC & WebTransport | eSeGeCe

Client HTTP/3 Delphi — QUIC et WebTransport pour Pascal

Une pile HTTP/3 opérationnelle pour Delphi et C++Builder : TsgcHTTP3Client envoie des requêtes RFC 9114 sur QUIC avec compression d'en-têtes QPACK, découverte Alt-Svc, server push et tunnels Extended CONNECT. Les composants de transport QUIC bruts et les sessions WebTransport font partie du même package, et un serveur HTTP/3 complète le tableau.

Mêmes sémantiques HTTP, nouveau transport

HTTP/3 (RFC 9114) conserve les méthodes, codes de statut et en-têtes que vous connaissez déjà et remplace TCP par QUIC, un transport basé sur UDP avec TLS 1.3 intégré.

Un client HTTP/3 Delphi donne à votre application le transport vers lequel le web moderne migre. QUIC (RFC 9000) combine les handshakes transport et TLS en un seul envoi, supprime le head-of-line blocking au niveau transport (un paquet perdu ne bloque que les streams dont il transportait les données) et survit aux changements de réseau grâce aux connection IDs, une connexion peut donc suivre un appareil du Wi-Fi aux données mobiles. Les en-têtes sont compressés avec QPACK (RFC 9204), le remplaçant HTTP/3 de HPACK.

sgcWebSockets pilote QUIC via le support QUIC natif d'OpenSSL 3.5. Le moteur est détecté automatiquement au chargement de la bibliothèque OpenSSL : avec les binaires OpenSSL 3.5 fournis, vous obtenez le moteur qmBuiltin, qui supporte plusieurs streams par connexion et autour duquel les composants sont construits. Un chemin qmCustom existe pour les builds OpenSSL de type quictls, limité à un seul stream par connexion.

Client HTTP/3

TsgcHTTP3Client : requêtes bloquantes et asynchrones, Alt-Svc, push, tunnels

Serveur HTTP/3

TsgcHTTP3Server : sert des requêtes sur QUIC, descend de TsgcQUICServer

QUIC brut

TsgcQUICClient / TsgcQUICServer : streams QUIC sans sémantique HTTP

Standards

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

Ce que le client HTTP/3 sait faire

Dix méthodes HTTP, plus la machinerie propre à HTTP/3 exposée en événements et méthodes.

Tous les verbes

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT et la nouvelle méthode IETF QUERY, chacun en appel bloquant, la plupart avec aussi une variante asynchrone.

Découverte Alt-Svc

Les serveurs annoncent la disponibilité HTTP/3 via l'en-tête Alt-Svc (RFC 7838). Le client le parse et le remonte via OnAltSvc, votre application décide donc quand basculer.

Server push

Le client garde le contrôle des réponses poussées : annoncez une limite avec SetMaxPushId, soyez notifié via OnPushPromise et refusez avec CancelPush.

Extended CONNECT

RFC 9220 tunnelle un autre protocole à travers un stream de requête. ExtendedConnect ouvre le tunnel quand le serveur annonce le support ; ensuite TunnelSend et OnTunnelData font circuler les octets.

WebTransport

Des sessions négociées sur Extended CONNECT qui remettent directement des streams QUIC à l'application, conçues pour le trafic bidirectionnel à faible latence. Basé sur les streams ; les datagrammes ne sont pas transportés sur le moteur QUIC livré.

Compression QPACK

Compression d'en-têtes RFC 9204 conçue pour la livraison désordonnée de QUIC, avec mises à jour de table dynamique transportées sur des streams encodeur et décodeur dédiés.

Handshake capable de 0-RTT

QUIC combine transport et TLS 1.3 en un seul envoi ; une connexion neuve se conclut en un seul aller-retour et une session reprise peut porter des données 0-RTT dès le premier envoi.

Migration de connexion

Les connexions QUIC sont identifiées par connection ID plutôt que par le quadruplet d'adresses, elles survivent donc au changement de réseau du client.

Streams multiples

Sur le moteur builtin, EnableMultiStream et OpenStream placent plusieurs streams QUIC indépendants sur une connexion, la fondation sur laquelle WebTransport est bâti.

Une requête GET sur HTTP/3

Connectez-vous à un hôte et un port, puis émettez des requêtes. Le port par défaut est 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 serveur HTTP/3 en Delphi

Le serveur lie un port UDP, charge un certificat et une clé, et lève un événement pour chaque requête. Le support HTTP/3 est aussi disponible côté serveur HTTP de la bibliothèque.

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;

Exigences d'édition et d'exécution

HTTP/3, QUIC et WebTransport sont exclusifs à l'édition All-Access. Les composants requièrent le cœur de bibliothèque basé sur Indy et OpenSSL 3.5 ou ultérieur, qui fournit le support QUIC natif sur lequel ils sont construits.

WebTransport requiert en plus le moteur QUIC builtin d'OpenSSL (qmBuiltin), car une session a besoin de plusieurs streams sur une seule connexion QUIC. Les composants serveur tournent eux aussi uniquement sur le moteur builtin. Comme un client ne peut pas supposer qu'un serveur parle HTTP/3, gardez le client HTTP/2 à portée de main pour les origines qui n'annoncent que h2. L'événement Alt-Svc vous dit quand HTTP/3 est disponible.

Pour aller plus loin

Client & serveur HTTP/2 Delphi

Le frère basé sur TCP : streams multiplexés, HPACK, server push et WebSocket-sur-HTTP/2.

Composants HTTP

La famille HTTP complète : HTTP/2, OAuth2, JWT, gRPC, services de push et plus.

Guide comparatif Delphi

Comment sgcWebSockets se compare aux autres bibliothèques réseau Delphi, sources citées.

Composant WebSocket

WebSocket sur HTTP/3 et QUIC (RFC 9220), HTTP/2 (RFC 8441) et HTTP/1.1 (RFC 6455).

Blog : La méthode HTTP QUERY

Le nouveau verbe IETF à travers les clients HTTP/1.1, HTTP/2 et HTTP/3, avec du code.

Éditions

Ce que chaque édition de sgcWebSockets inclut, de Standard à All-Access.

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

Essayez HTTP/3 depuis Delphi dès aujourd'hui

Téléchargez l'essai et lancez le client HTTP/3 contre votre propre serveur ou toute origine compatible HTTP/3.