Klient HTTP/3 dla Delphi | Komponenty QUIC i WebTransport | eSeGeCe

Klient HTTP/3 dla Delphi — QUIC i WebTransport dla Pascala

Działający stos HTTP/3 dla Delphi i C++Builder: TsgcHTTP3Client wysyła żądania RFC 9114 nad QUIC z kompresją nagłówków QPACK, odkrywaniem Alt-Svc, server push i tunelami Extended CONNECT. Surowe komponenty transportu QUIC i sesje WebTransport są częścią tego samego pakietu, a serwer HTTP/3 dopełnia całości.

Ta sama semantyka HTTP, nowy transport

HTTP/3 (RFC 9114) zachowuje metody, kody statusu i nagłówki, które już znasz, i zastępuje TCP przez QUIC, transport oparty na UDP z wbudowanym TLS 1.3.

Klient HTTP/3 dla Delphi daje Twojej aplikacji transport, na który przechodzi nowoczesny web. QUIC (RFC 9000) łączy handshake transportowy i TLS w jeden przelot, usuwa blokowanie head-of-line na poziomie transportu (zgubiony pakiet zatrzymuje tylko strumienie, których dane przenosił) i przeżywa zmiany sieci dzięki connection ID, więc połączenie może podążać za urządzeniem z Wi-Fi na dane mobilne. Nagłówki są kompresowane przez QPACK (RFC 9204), następcę HPACK w HTTP/3.

sgcWebSockets napędza QUIC przez natywne wsparcie QUIC w OpenSSL 3.5. Silnik jest wykrywany automatycznie przy ładowaniu biblioteki OpenSSL: z dostarczanymi binariami OpenSSL 3.5 otrzymujesz silnik qmBuiltin, który wspiera wiele strumieni na połączenie i wokół którego zbudowane są komponenty. Ścieżka qmCustom istnieje dla buildów OpenSSL w stylu quictls, ograniczona do jednego strumienia na połączenie.

Klient HTTP/3

TsgcHTTP3Client: żądania blokujące i asynchroniczne, Alt-Svc, push, tunele

Serwer HTTP/3

TsgcHTTP3Server: obsługuje żądania nad QUIC, dziedziczy z TsgcQUICServer

Surowe QUIC

TsgcQUICClient / TsgcQUICServer: strumienie QUIC bez semantyki HTTP

Standardy

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

Co potrafi klient HTTP/3

Dziesięć metod HTTP, plus maszyneria specyficzna dla HTTP/3 udostępniona jako zdarzenia i metody.

Wszystkie czasowniki

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT i nowa metoda IETF QUERY, każda jako wywołanie blokujące, większość także z wariantem asynchronicznym.

Odkrywanie Alt-Svc

Serwery ogłaszają dostępność HTTP/3 przez nagłówek Alt-Svc (RFC 7838). Klient parsuje go i udostępnia przez OnAltSvc, więc Twoja aplikacja decyduje, kiedy się przełączyć.

Server push

Klient zachowuje kontrolę nad pchanymi odpowiedziami: ogłoś limit przez SetMaxPushId, odbieraj powiadomienia przez OnPushPromise i odmawiaj przez CancelPush.

Extended CONNECT

RFC 9220 tuneluje inny protokół przez strumień żądania. ExtendedConnect otwiera tunel, gdy serwer ogłasza wsparcie; potem TunnelSend i OnTunnelData przenoszą bajty.

WebTransport

Sesje negocjowane nad Extended CONNECT, które oddają aplikacji strumienie QUIC bezpośrednio, zbudowane dla dwukierunkowego ruchu o niskiej latencji. Oparte na strumieniach; datagramy nie są przenoszone na dostarczanym silniku QUIC.

Kompresja QPACK

Kompresja nagłówków RFC 9204 zaprojektowana dla dostarczania poza kolejnością w QUIC, z aktualizacjami tabeli dynamicznej przenoszonymi na dedykowanych strumieniach enkodera i dekodera.

Handshake zdolny do 0-RTT

QUIC łączy transport i TLS 1.3 w jeden przelot; świeże połączenie zamyka się w jednej rundzie, a wznowiona sesja może przenieść dane 0-RTT w pierwszym przelocie.

Migracja połączenia

Połączenia QUIC są identyfikowane przez connection ID, a nie przez czwórkę adresową, więc przeżywają zmianę sieci po stronie klienta.

Wiele strumieni

Na silniku builtin EnableMultiStream i OpenStream umieszczają kilka niezależnych strumieni QUIC na jednym połączeniu, fundament, na którym buduje WebTransport.

Żądanie GET nad HTTP/3

Połącz się z hostem i portem, potem wysyłaj żądania. Domyślny port to 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();

Serwer HTTP/3 w Delphi

Serwer wiąże port UDP, ładuje certyfikat i klucz oraz zgłasza zdarzenie dla każdego żądania. Wsparcie HTTP/3 jest dostępne także po stronie serwera HTTP biblioteki.

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;

Wymagania edycji i środowiska uruchomieniowego

HTTP/3, QUIC i WebTransport są dostępne wyłącznie w edycji All-Access. Komponenty wymagają rdzenia biblioteki opartego na Indy oraz OpenSSL 3.5 lub nowszego, który dostarcza natywne wsparcie QUIC, na którym są zbudowane.

WebTransport dodatkowo wymaga wbudowanego silnika QUIC OpenSSL (qmBuiltin), ponieważ sesja potrzebuje kilku strumieni na jednym połączeniu QUIC. Komponenty serwerowe również działają tylko na silniku builtin. Ponieważ klient nie może zakładać, że serwer mówi HTTP/3, trzymaj pod ręką klienta HTTP/2 dla origin ogłaszających tylko h2. Zdarzenie Alt-Svc mówi Ci, kiedy HTTP/3 jest dostępne.

Głębsze zanurzenia

Klient i serwer HTTP/2 dla Delphi

Rodzeństwo oparte na TCP: multipleksowane strumienie, HPACK, server push i WebSocket-over-HTTP/2.

Komponenty HTTP

Pełna rodzina HTTP: HTTP/2, OAuth2, JWT, gRPC, usługi push i więcej.

Przewodnik porównawczy Delphi

Jak sgcWebSockets wypada na tle innych bibliotek sieciowych Delphi, ze źródłami.

Komponent WebSocket

WebSocket nad HTTP/3 i QUIC (RFC 9220), HTTP/2 (RFC 8441) i HTTP/1.1 (RFC 6455).

Blog: Metoda HTTP QUERY

Nowy czasownik IETF w klientach HTTP/1.1, HTTP/2 i HTTP/3, z kodem.

Edycje

Co zawiera każda edycja sgcWebSockets, od Standard do All-Access.

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

Wypróbuj HTTP/3 z Delphi już dziś

Pobierz wersję próbną i uruchom klienta HTTP/3 wobec własnego serwera lub dowolnego origin z włączonym HTTP/3.