Protocolo HTTP/2
Cliente e servidor HTTP/2 nativos para Delphi e C++Builder. Enquadramento binário, multiplexação de streams, compressão de cabeçalhos HPACK e negociação ALPN — sem dependência de IIS, Apache ou Indy.
Cliente e servidor HTTP/2 nativos para Delphi e C++Builder. Enquadramento binário, multiplexação de streams, compressão de cabeçalhos HPACK e negociação ALPN — sem dependência de IIS, Apache ou Indy.
Dois componentes prontos para produção implementam todo o protocolo HTTP/2 (RFC 9113). Use o cliente para consumir APIs HTTP/2, use o servidor para publicá-las — ou ambos dentro da mesma aplicação.
Cliente HTTP/2 nativo — GET/POST/PUT/DELETE multiplexados sobre uma única conexão TLS, cabeçalhos comprimidos por HPACK, upgrade ALPN h2 ou conhecimento prévio h2c, tratamento de server push e autenticação bearer / basic / NTLM.
Servidor HTTP/2 nativo — o mesmo servidor HTTP WebSocket atende HTTP/1.1, HTTP/2 (h2) e WebSocket em uma única porta TLS. Negociação ALPN, multiplexação de streams, respostas HPACK e bootstrap opcional de WebSocket sobre HTTP/2 conforme RFC 8441.
Uma implementação de primeira classe do enquadramento HTTP/2 integrada tanto ao cliente quanto ao servidor HTTP WebSocket.
TsgcHTTP2ClientTsgcWebSocketHTTPServer
Windows, macOS, Linux, iOS, Android
Cliente: Standard / Pro / Enterprise
Servidor: Pro / Enterprise
Todos os ganhos do HTTP/2 sobre o HTTP/1.1 — em código Delphi/C++Builder nativo, sem precisar iniciar um servidor web separado.
Requisições e respostas são divididas em frames binários, analisados por uma máquina de estados determinística. Acabou a análise de linhas de texto e a ambiguidade do HTTP/1.1.
Dezenas de requisições em andamento compartilham uma única conexão TCP/TLS — sem head-of-line blocking na camada HTTP, sem sockets extras por requisição.
Codificador/decodificador HPACK integrado (RFC 7541). Cookies repetidos, tokens de autenticação e cabeçalhos content-type custam quase zero bytes após a primeira requisição.
Durante o handshake TLS, o peer anuncia h2 e http/1.1; o valor ALPN negociado seleciona o protocolo sem desperdiçar round-trips.
Para links internos confiáveis e sidecars de service mesh, ambos os lados podem pular o ALPN e iniciar HTTP/2 em texto puro via HTTP2_PriorKnowledge.
O servidor pode enviar respostas PUSH_PROMISE de forma proativa; o cliente as expõe através de OnHTTP2StreamData para cache. Observação: descontinuado na web pública, mas ainda útil internamente.
Dicas de prioridade e dependência por stream permitem que respostas críticas (autenticação, navegação, resultados JSON-RPC) ultrapassem transferências volumosas na mesma conexão.
O controle de fluxo WINDOW_UPDATE por stream e por conexão impede que uma resposta grande sufoque as menores — ajustável via frames SETTINGS.
Defina TLSOptions.IOHandler como iohSChannel para TLS do kernel do Windows (sem DLLs) ou iohOpenSSL para suporte completo a 1.2/1.3 multiplataforma.
Cenários prontos para uso em que a multiplexação e a economia de HPACK do HTTP/2 se pagam imediatamente.
A API provider do APNs da Apple exige HTTP/2. TsgcHTTP2Client conduz o componente Apple Push de ponta a ponta com autenticação baseada em token.
A API FCM HTTP v1 do Google roda sobre HTTP/2. O mesmo componente dá suporte ao FCM com emissão de JWT por conta de serviço.
A maioria das APIs em nuvem (Stripe, GitHub, Cloudflare, Google, Azure…) fala HTTP/2 por padrão — clientes multiplexados reduzem a latência em chamadas paralelas.
Microsserviços internos atrás de um sidecar mesh usam HTTP/2 por conhecimento prévio (h2c) para multiplexar centenas de streams RPC em um único socket.
TsgcWebSocketHTTPServer atende HTTP/1.1, HTTP/2 e WebSocket em um único endpoint TLS — o ALPN roteia cada conexão automaticamente.
Para clientes que preferem tunelar frames WebSocket dentro de streams HTTP/2, ative Specifications.RFC8441 no servidor.
Solte o componente, configure o TLS, pronto. O ALPN negocia h2 para você durante o handshake.
uses
sgcHTTP, sgcHTTP2;
var
HTTP2: TsgcHTTP2Client;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.TLSOptions.IOHandler := iohSChannel; // ou iohOpenSSL
HTTP2.TLSOptions.Version := tls1_2;
// Adiciona cabeçalhos personalizados (comprimidos por HPACK)
HTTP2.Request.CustomHeaders.Add('authorization: Bearer eyJ...');
// GET sobre HTTP/2 (ALPN negocia h2)
Memo1.Text := HTTP2.Get('https://api.example.com/v1/items');
ShowMessage(IntToStr(HTTP2.Response.Status));
end;
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';
// HTTP/1.1, HTTP/2 e WebSocket na mesma porta TLS
Server.Specifications.HTTP := True;
Server.Specifications.HTTP2 := True;
Server.Specifications.RFC6455 := True;
Server.Active := True;
end;
// uses: sgcHTTP, sgcHTTP2
TsgcHTTP2Client *HTTP2 = new TsgcHTTP2Client(this);
HTTP2->TLSOptions->IOHandler = iohSChannel;
HTTP2->Request->CustomHeaders->Add("authorization: Bearer eyJ...");
Memo1->Text = HTTP2->Get("https://api.example.com/v1/items");
Links diretos para as páginas dos componentes, ajuda online e o projeto demo pronto para rodar que acompanha a versão de avaliação.
| Cliente HTTP/2 — TsgcHTTP2Client Página do componente: recursos, exemplos de código e opções de TLS para o cliente. | Abrir | |
| Servidor HTTP/2 — TsgcWebSocketHTTPServer Página do componente: como habilitar HTTP/2 junto com HTTP/1.1 e WebSocket em uma única porta TLS. | Abrir | |
| Ajuda online — HTTP/2 Referência completa de propriedades, métodos e eventos dos componentes HTTP/2. | Abrir | |
| Projeto demo — Demos\20.HTTP_Protocol\01.HTTP2_Server_And_Client Projeto de exemplo pronto para rodar. Acompanha o pacote sgcWebSockets — baixe a avaliação abaixo. | Abrir | |
| Manual do usuário (PDF) Manual completo cobrindo todos os componentes da biblioteca. | Abrir |