Cliente y servidor HTTP/2 para Delphi — Multiplexado, streaming, push

Implementación Pascal nativa de HTTP/2 según RFC 9113 — multiplexación de streams, compresión de cabeceras HPACK, control de flujo, server push y la extensión WebSocket-sobre-HTTP/2 (RFC 8441). Mismo componente, cliente o servidor, desde Delphi 7 hasta Delphi 13.

Una pila HTTP/2 en Pascal puro

No es un wrapper fino alrededor de WinHTTP o libcurl — una implementación desde cero que te da control a nivel de frame.

Un cliente HTTP/2 para Delphi ya no es opcional: HTTP/2 es el formato de wire que habla toda la web moderna. Apple Push Notifications requiere HTTP/2. Las APIs de Google negocian HTTP/2. AWS, Azure y CloudFront usan HTTP/2 por defecto. Y las ganancias son reales: una sola conexión TCP/TLS multiplexa decenas de peticiones en vuelo, los conjuntos de cabeceras se comprimen con HPACK y el servidor puede empujar recursos que el cliente todavía no ha pedido. sgcWebSockets incluye TsgcHTTP2Client (cliente) y soporte HTTP/2 dentro de TsgcWebSocketHTTPServer (servidor) — ambos en Pascal puro, ambos funcionando en cada plataforma a la que apunta el compilador Delphi.

Un servidor HTTP/2 para Delphi en la misma librería puede hospedar APIs REST, empujar eventos a clientes de larga vida y aceptar upgrades WebSocket sobre HTTP/2 (RFC 8441) — la forma estándar en la que la infraestructura moderna apila WebSocket sobre HTTP/2 / HTTP/3.

Cliente

TsgcHTTP2Client

Servidor

TsgcWebSocketHTTPServer con HTTP/2 habilitado

Estándares

RFC 9113 (HTTP/2), RFC 7541 (HPACK), RFC 8441 (WS-sobre-H2)

TLS

OpenSSL, SChannel, HTTP.sys — negociado por ALPN

Por qué importa HTTP/2

Las cuatro grandes ventajas sobre HTTP/1.1 — y los detalles operativos que las hacen funcionar.

Multiplexación de streams

Hasta SETTINGS_MAX_CONCURRENT_STREAMS peticiones en vuelo sobre una sola conexión TCP+TLS — sin head-of-line blocking, sin pool de conexiones que ajustar.

Compresión HPACK

La tabla de cabeceras estática + dinámica por conexión elimina los kilobytes de cabeceras repetidas (cookies, user-agent, accept) que inflan el tráfico HTTP/1.1.

Server push

El servidor puede enviar preventivamente recursos que el cliente necesitará (CSS, JS, sub-recursos JSON) antes de que los solicite — ahorra un round-trip de petición.

Prioridades de stream

El peso por stream y el árbol de dependencias te permiten decir al servidor que envíe el documento índice antes que el blob de analítica.

Control de flujo

WINDOW_UPDATE por stream y por conexión evita que un consumidor lento ahogue al emisor — back-pressure integrada en el formato de wire.

Negociación ALPN

ALPN a nivel TLS negocia h2 automáticamente — cliente y servidor acuerdan HTTP/2 antes de la primera petición, con fallback a HTTP/1.1 si el par no lo habla.

WebSocket-sobre-HTTP/2

RFC 8441: tuneliza una sesión WebSocket dentro de un stream HTTP/2 — atraviesa cada balanceador HTTP/2 (Envoy, nginx, ALB, GCLB).

Trailers y amigable con gRPC

Las cabeceras trailer HTTP (según RFC 7230) son de primera clase — la base para los metadatos status / message de gRPC.

Peticiones GET multiplexadas

Dispara 10 GETs concurrentes sobre una única conexión — HPACK y la multiplexación lo hacen rutina.

uses
  sgcHTTP2_Client, sgcHTTP_Classes;

var
  HTTP2: TsgcHTTP2Client;
  i: Integer;
begin
  HTTP2 := TsgcHTTP2Client.Create(nil);
  HTTP2.Host := 'api.example.com';
  HTTP2.Port := 443;
  HTTP2.TLS  := True;
  HTTP2.TLSOptions.ALPNProtocols.Add('h2');
  HTTP2.OnResponse := DoResponse;

  HTTP2.Connect;

  // 10 concurrent GETs on ONE connection, ONE TLS handshake
  for i := 1 to 10 do
    HTTP2.Get(Format('/items/%d', [i]));
end;

procedure TForm1.DoResponse(Sender: TObject;
  const aStreamId: Cardinal;
  aHeaders: TsgcHTTP2Headers;
  aData: TBytes);
begin
  Memo1.Lines.Add(Format('stream %d  status %s  bytes %d',
    [aStreamId, aHeaders.Status, Length(aData)]));
end;

Empuja un sub-recurso antes de que el cliente lo pida

Dentro de un manejador OnCommandGet, llama a PushPromise para enviar preventivamente /style.css junto a /index.html.

uses
  sgcWebSocket, sgcHTTP_Classes;

procedure TForm1.WSServerCommandGet(Sender: TObject;
  aContext: TsgcWSConnection;
  ARequestInfo: TsgcWSRequestInfo;
  AResponseInfo: TsgcWSResponseInfo);
begin
  if ARequestInfo.URI = '/index.html' then
  begin
    // Push the CSS so the browser doesn’t round-trip for it
    AResponseInfo.PushPromise('/style.css');
    AResponseInfo.PushPromise('/app.js');

    AResponseInfo.ContentType := 'text/html; charset=utf-8';
    AResponseInfo.ContentText :=
      '<!doctype html><link rel="stylesheet" href="/style.css">' +
      '<script src="/app.js" defer></script>' +
      '<h1>HTTP/2 from Delphi</h1>';
  end;
end;

Dónde HTTP/2 es obligatorio, no opcional

Apple Push Notifications

APNs sólo acepta HTTP/2 — una conexión persistente, miles de streams por segundo, auth basada en JWT o certificado. Ver la página de Apple Push.

Google FCM v1

La API FCM HTTP v1 corre sobre HTTP/2. Ver la página de Google FCM.

Servicios gRPC

gRPC es HTTP/2 con protobuf y trailers. La pila HTTP/2 de aquí es la base sobre la que construye un cliente gRPC Pascal.

WebSocket-sobre-HTTP/2

La forma más limpia de desplegar WebSocket a través de balanceadores modernos y CDNs que prefieren HTTP/2 aguas arriba.

Clientes REST de alta throughput

Una conexión, cientos de peticiones en vuelo — ideal para crawlers, ingestores de market-data y workers fan-out.

Reemplazo de long-pollHaz streaming de una respuesta JSON-lines o estilo SSE sobre un único stream HTTP/2 — back-pressure incluida.

Profundiza

Referencia HTTP/2

Referencia completa del componente para cliente y servidor HTTP/2.

Cliente HTTP/2

Página dedicada del componente cliente.

Servidor HTTP/2

Página dedicada del componente servidor.

Componente WebSocket

WebSocket sobre HTTP/2 (RFC 8441) y sobre HTTP/1.1 (RFC 6455).

Blog: soporte inicial servidor HTTP/2

Anuncio original y notas de diseño.

Blog: rendimiento HTTP/2 vs HTTP/1

Cifras de benchmark para multiplexación y ganancias HPACK.

Blog: tests de conformidad HTTP/2

Ejecutando la suite h2spec contra el servidor.

Blog: APNs sobre HTTP/2

Ejemplo práctico de HTTP/2: notificaciones APNs.

Multiplexa tus peticiones hoy

Descarga la versión de prueba — las demos de cliente y servidor HTTP/2 compilan de fábrica.