Delphi HTTP/3-client | QUIC & WebTransport-componenten | eSeGeCe

Delphi HTTP/3-client — QUIC en WebTransport voor Pascal

Een werkende HTTP/3-stack voor Delphi en C++Builder: TsgcHTTP3Client verstuurt RFC 9114-requests over QUIC met QPACK header compression, Alt-Svc-discovery, server push en Extended CONNECT-tunnels. Raw QUIC-transportcomponenten en WebTransport-sessies zitten in hetzelfde package, en een HTTP/3-server maakt het plaatje compleet.

Dezelfde HTTP-semantiek, een nieuw transport

HTTP/3 (RFC 9114) behoudt de methodes, statuscodes en headers die je al kent en vervangt TCP door QUIC, een UDP-gebaseerd transport met ingebouwde TLS 1.3.

Een Delphi HTTP/3-client geeft je applicatie het transport waar het moderne web naartoe beweegt. QUIC (RFC 9000) combineert de transport- en TLS-handshakes in een enkele flight, verwijdert head-of-line-blocking op transportniveau (een verloren pakket stalleert alleen de streams waarvan het data droeg), en overleeft netwerkwisselingen via connection IDs, zodat een verbinding een apparaat kan volgen van Wi-Fi naar mobiele data. Headers worden gecomprimeerd met QPACK (RFC 9204), de HTTP/3-vervanger van HPACK.

sgcWebSockets stuurt QUIC aan via de native QUIC-ondersteuning in OpenSSL 3.5. De engine wordt automatisch gedetecteerd wanneer de OpenSSL-bibliotheek laadt: met de meegeleverde OpenSSL 3.5-binaries krijg je de qmBuiltin-engine, die meerdere streams per verbinding ondersteunt en de engine is waar de componenten omheen zijn gebouwd. Voor quictls-achtige OpenSSL-builds bestaat een qmCustom-pad, beperkt tot een enkele stream per verbinding.

HTTP/3-client

TsgcHTTP3Client: blocking en asynchrone requests, Alt-Svc, push, tunnels

HTTP/3-server

TsgcHTTP3Server: bedient requests over QUIC, stamt af van TsgcQUICServer

Raw QUIC

TsgcQUICClient / TsgcQUICServer: QUIC-streams zonder HTTP-semantiek

Standaarden

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

Wat de HTTP/3-client kan

Tien HTTP-methodes, plus de HTTP/3-specifieke machinerie blootgesteld als events en methodes.

Alle verbs

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT en de nieuwe IETF QUERY-methode, elk als blocking-aanroep, de meeste ook met een asynchrone variant.

Alt-Svc-discovery

Servers adverteren HTTP/3-beschikbaarheid via de Alt-Svc-header (RFC 7838). De client parseert hem en stelt hem bloot via OnAltSvc, dus jouw applicatie beslist wanneer over te schakelen.

Server push

De client houdt de regie over gepushte responses: adverteer een limiet met SetMaxPushId, word genotificeerd via OnPushPromise en weiger met CancelPush.

Extended CONNECT

RFC 9220 tunnelt een ander protocol door een request-stream. ExtendedConnect opent de tunnel wanneer de server ondersteuning adverteert; daarna verplaatsen TunnelSend en OnTunnelData de bytes.

WebTransport

Sessies onderhandeld over Extended CONNECT die de applicatie direct QUIC-streams in handen geven, gebouwd voor bidirectioneel verkeer met lage latency. Stream-gebaseerd; datagrammen worden niet gedragen op de meegeleverde QUIC-engine.

QPACK-compressie

RFC 9204 header compression ontworpen voor de out-of-order-delivery van QUIC, met dynamic-table-updates gedragen op speciale encoder- en decoder-streams.

0-RTT-capabele handshake

QUIC combineert transport en TLS 1.3 in een flight; een verse verbinding is compleet in een enkele round trip en een hervatte sessie kan 0-RTT-data in de eerste flight meedragen.

Connection migration

QUIC-verbindingen worden geïdentificeerd door een connection ID in plaats van het adres-viertal, dus ze overleven een client die van netwerk wisselt.

Meerdere streams

Op de builtin engine zetten EnableMultiStream en OpenStream meerdere onafhankelijke QUIC-streams op een verbinding, het fundament waar WebTransport op bouwt.

Een GET-request over HTTP/3

Verbind met een host en poort, en geef daarna requests af. De standaardpoort is 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();

Een HTTP/3-server in Delphi

De server bindt een UDP-poort, laadt een certificaat en sleutel, en vuurt een event voor elke request. HTTP/3-ondersteuning is ook beschikbaar aan de HTTP-serverkant van de bibliotheek.

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;

Editie- en runtime-vereisten

HTTP/3, QUIC en WebTransport zijn exclusief voor de All-Access-editie. De componenten vereisen de Indy-gebaseerde bibliotheekkern en OpenSSL 3.5 of later, die de native QUIC-ondersteuning levert waar ze op zijn gebouwd.

WebTransport vereist daarnaast de builtin OpenSSL QUIC-engine (qmBuiltin), omdat een sessie meerdere streams op een QUIC-verbinding nodig heeft. Ook de servercomponenten draaien alleen op de builtin engine. Omdat een client niet mag aannemen dat een server HTTP/3 spreekt, houd je de HTTP/2-client bij de hand voor origins die alleen h2 adverteren. Het Alt-Svc-event vertelt je wanneer HTTP/3 beschikbaar is.

Verder verdiepen

Delphi HTTP/2-client & -server

De TCP-gebaseerde broer: multiplexed streams, HPACK, server push en WebSocket-over-HTTP/2.

HTTP-componenten

De volledige HTTP-familie: HTTP/2, OAuth2, JWT, gRPC, push-services en meer.

Delphi-vergelijkingsgids

Hoe sgcWebSockets zich verhoudt tot andere Delphi-netwerkbibliotheken, met bronvermelding.

WebSocket-component

WebSocket over HTTP/3 en QUIC (RFC 9220), HTTP/2 (RFC 8441) en HTTP/1.1 (RFC 6455).

Blog: De HTTP QUERY-methode

Het nieuwe IETF-verb in de HTTP/1.1-, HTTP/2- en HTTP/3-clients, met code.

Edities

Wat elke sgcWebSockets-editie bevat, van Standard tot All-Access.

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

Probeer HTTP/3 vandaag nog vanuit Delphi

Download de proefversie en draai de HTTP/3-client tegen je eigen server of elke HTTP/3-enabled origin.