HTTP/2 Server

Sirva HTTP/2 (h2) ao lado de HTTP/1.1 e WebSocket em uma única porta TLS via TsgcWebSocketHTTPServer. Negociação ALPN, HPACK e multiplexação de streams já estão integrados.

TsgcWebSocketHTTPServer

O mesmo TsgcWebSocketHTTPServer usado para WebSocket e HTTP/1.1 também serve HTTP/2 sobre TLS — habilite Specifications.HTTP2 e o ALPN cuida do resto.

Classe do componente

TsgcWebSocketHTTPServer

Protocolo

HTTP/2 (RFC 9113)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Professional / Enterprise

Habilite HTTP/2 com uma propriedade

Em uma instância de TsgcWebSocketHTTPServer, habilite TLS e ative Specifications.HTTP2 — a negociação ALPN h2 faz o upgrade automaticamente.

uses
  sgcWebSocket;

var
  Server: TsgcWebSocketHTTPServer;
begin
  Server := TsgcWebSocketHTTPServer.Create(nil);
  Server.Port := 443;
  Server.SSL  := True;
  Server.SSLOptions.CertFile := 'cert.pem';
  Server.SSLOptions.KeyFile  := 'key.pem';

  // Allow HTTP/1.1, HTTP/2 and WebSocket on the same port
  Server.Specifications.HTTP   := True;
  Server.Specifications.HTTP2  := True;
  Server.Specifications.RFC6455 := True;

  Server.OnCommandGet := procedure(AContext: TIdContext;
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo)
  begin
    AResponseInfo.ContentText := 'Hello over HTTP/' + IfThen(ARequestInfo.HTTP2, '2', '1.1');
  end;

  Server.Active := True;
end;
// uses: sgcWebSocket
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
Server->Port = 443;
Server->SSL  = true;
Server->Specifications->HTTP2 = true;
Server->Active = true;

O que tem por dentro

TsgcWebSocketHTTPServer com HTTP/2 habilitado — compartilhe um único endpoint TLS entre HTTP/1.1, HTTP/2 e WebSocket.

Negociação ALPN

Durante o handshake TLS, o servidor anuncia tanto http/1.1 quanto h2. O cliente escolhe o protocolo; o servidor despacha de acordo — nenhum socket de escuta separado é necessário.

Coexistência com WebSocket

Os clientes WebSocket ainda fazem upgrade pelo caminho HTTP/1.1. A RFC 8441 (Bootstrapping WebSockets with HTTP/2) é suportada via Specifications.RFC8441.

HPACK + enquadramento de streams

Codificador HPACK integrado para cabeçalhos de resposta e um núcleo de multiplexação de streams que despacha cada requisição em seu próprio stream-id, respeitando dicas de prioridade.

Server push

O server push (PUSH_PROMISE) é suportado, mas agora está obsoleto — clientes modernos o ignoram; considere usar 103 Early Hints ou HTTP/3 como alternativa.

Escolha de TLS

Defina SSLOptions.IOHandler como iohOpenSSL (multiplataforma) ou iohSChannel (Windows). O HTTP/2 requer TLS 1.2+ conforme a implantação RFC 7540 / 9113.

Métricas de conexão

Cada conexão HTTP/2 expõe contagem de streams, estimativas de RTT, total de bytes de entrada/saída e os parâmetros do frame SETTINGS negociado via OnHTTP2Settings.

Especificações & referências

Fontes autoritativas para o protocolo implementado por este componente.

Documentação & Demos

Acesse a referência do componente, pegue o projeto demo pronto para executar e baixe a versão de avaliação.

Ajuda online — TsgcWebSocketHTTPServer Referência completa de propriedades, métodos e eventos deste componente.
Projeto demo — Demos\20.HTTP_Protocol\01.HTTP2_Server_And_Client Exemplo pronto para executar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo.
Documento técnico (PDF) Recursos, início rápido, exemplos de código para Delphi & C++ Builder e referências de fontes primárias — somente deste componente.
Manual do usuário (PDF) Manual completo cobrindo todos os componentes da biblioteca.

Pronto para servir HTTP/2 a partir do Delphi?

Baixe a versão de avaliação gratuita e sirva HTTP/1.1, HTTP/2 e WebSocket a partir de um único endpoint TLS.