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

Cliente HTTP/3 para Delphi — QUIC y WebTransport para Pascal

Una pila HTTP/3 funcional para Delphi y C++Builder: TsgcHTTP3Client envía peticiones RFC 9114 sobre QUIC con compresión de cabeceras QPACK, descubrimiento Alt-Svc, server push y túneles Extended CONNECT. Los componentes de transporte QUIC puro y las sesiones WebTransport forman parte del mismo paquete, y un servidor HTTP/3 completa el cuadro.

La misma semántica HTTP, un transporte nuevo

HTTP/3 (RFC 9114) conserva los métodos, códigos de estado y cabeceras que ya conoces y sustituye TCP por QUIC, un transporte sobre UDP con TLS 1.3 integrado.

Un cliente HTTP/3 para Delphi da a tu aplicación el transporte hacia el que se está moviendo la web moderna. QUIC (RFC 9000) combina los handshakes de transporte y TLS en un único viaje, elimina el head-of-line blocking a nivel de transporte (un paquete perdido sólo detiene los streams cuyos datos transportaba) y sobrevive a los cambios de red gracias a los connection IDs, de modo que una conexión puede seguir a un dispositivo del Wi-Fi a los datos móviles. Las cabeceras se comprimen con QPACK (RFC 9204), el sustituto de HPACK en HTTP/3.

sgcWebSockets maneja QUIC a través del soporte QUIC nativo de OpenSSL 3.5. El motor se detecta automáticamente al cargar la biblioteca OpenSSL: con los binarios OpenSSL 3.5 incluidos obtienes el motor qmBuiltin, que soporta múltiples streams por conexión y es el motor en torno al cual están construidos los componentes. Existe una ruta qmCustom para builds de OpenSSL estilo quictls, limitada a un stream por conexión.

Cliente HTTP/3

TsgcHTTP3Client: peticiones bloqueantes y asíncronas, Alt-Svc, push, túneles

Servidor HTTP/3

TsgcHTTP3Server: sirve peticiones sobre QUIC, desciende de TsgcQUICServer

QUIC puro

TsgcQUICClient / TsgcQUICServer: streams QUIC sin semántica HTTP

Estándares

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

Qué puede hacer el cliente HTTP/3

Diez métodos HTTP, más la maquinaria específica de HTTP/3 expuesta como eventos y métodos.

Todos los verbos

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT y el nuevo método IETF QUERY, cada uno como llamada bloqueante, la mayoría también con variante asíncrona.

Descubrimiento Alt-Svc

Los servidores anuncian la disponibilidad de HTTP/3 mediante la cabecera Alt-Svc (RFC 7838). El cliente la parsea y la expone a través de OnAltSvc, así que tu aplicación decide cuándo cambiar.

Server push

El cliente mantiene el control de las respuestas empujadas: anuncia un límite con SetMaxPushId, recibe la notificación por OnPushPromise y rechaza con CancelPush.

Extended CONNECT

RFC 9220 tuneliza otro protocolo a través de un stream de petición. ExtendedConnect abre el túnel cuando el servidor anuncia soporte; después TunnelSend y OnTunnelData mueven los bytes.

WebTransport

Sesiones negociadas sobre Extended CONNECT que entregan a la aplicación streams QUIC directamente, pensadas para tráfico bidireccional de baja latencia. Basadas en streams; los datagramas no viajan sobre el motor QUIC incluido.

Compresión QPACK

Compresión de cabeceras RFC 9204 diseñada para la entrega desordenada de QUIC, con actualizaciones de tabla dinámica transportadas en streams codificador y decodificador dedicados.

Handshake con capacidad 0-RTT

QUIC combina transporte y TLS 1.3 en un solo viaje; una conexión nueva se completa en un único round trip y una sesión reanudada puede llevar datos 0-RTT en el primer vuelo.

Migración de conexión

Las conexiones QUIC se identifican por connection ID en lugar de por la cuádrupla de direcciones, así que sobreviven a que el cliente cambie de red.

Múltiples streams

En el motor builtin, EnableMultiStream y OpenStream colocan varios streams QUIC independientes en una conexión, la base sobre la que se construye WebTransport.

Una petición GET sobre HTTP/3

Conecta a un host y un puerto y lanza peticiones. El puerto por defecto es el 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 servidor HTTP/3 en Delphi

El servidor enlaza un puerto UDP, carga un certificado y una clave, y dispara un evento por cada petición. El soporte HTTP/3 también está disponible en el lado servidor HTTP de la 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 edición y de runtime

HTTP/3, QUIC y WebTransport son exclusivos de la edición All-Access. Los componentes requieren el núcleo de la biblioteca basado en Indy y OpenSSL 3.5 o posterior, que aporta el soporte QUIC nativo sobre el que están construidos.

WebTransport requiere además el motor QUIC builtin de OpenSSL (qmBuiltin), porque una sesión necesita varios streams en una misma conexión QUIC. Los componentes servidor también funcionan únicamente con el motor builtin. Como un cliente no puede asumir que un servidor habla HTTP/3, ten a mano el cliente HTTP/2 para los orígenes que sólo anuncian h2. El evento Alt-Svc te avisa cuando HTTP/3 está disponible.

Para profundizar

Cliente y servidor HTTP/2 para Delphi

El hermano basado en TCP: streams multiplexados, HPACK, server push y WebSocket-sobre-HTTP/2.

Componentes HTTP

La familia HTTP completa: HTTP/2, OAuth2, JWT, gRPC, servicios push y más.

Guía comparativa Delphi

Cómo se compara sgcWebSockets con otras bibliotecas de red para Delphi, con fuentes citadas.

Componente WebSocket

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

Blog: El método HTTP QUERY

El nuevo verbo IETF en los clientes HTTP/1.1, HTTP/2 y HTTP/3, con código.

Ediciones

Qué incluye cada edición de sgcWebSockets, de Standard a All-Access.

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

Prueba HTTP/3 desde Delphi hoy mismo

Descarga la versión de prueba y ejecuta el cliente HTTP/3 contra tu propio servidor o contra cualquier origen con HTTP/3 habilitado.