TCP + TLS: três viagens de ida e volta
SYN, SYN-ACK e ACK abrem o socket. ClientHello, ServerHello e Finished configuram o TLS. Só então a primeira requisição sai.
TCP mais TLS precisa de três viagens de ida e volta antes que o primeiro byte de uma resposta chegue. O QUIC combina o handshake de transporte e o handshake de criptografia em um único envio, e uma conexão retomada pode enviar dados já no primeiro pacote. O sgcQUIC dá ao Delphi, C++ Builder e .NET um transporte QUIC nativo e um cliente e servidor HTTP/3 construídos sobre ele, no mecanismo QUIC do OpenSSL 3.5.
Um complemento do sgcWebSockets Enterprise. Ver preços →O handshake de transporte, o handshake TLS e a primeira requisição custam cada um uma viagem de ida e volta sobre TCP. O QUIC leva os três em uma única troca.
SYN, SYN-ACK e ACK abrem o socket. ClientHello, ServerHello e Finished configuram o TLS. Só então a primeira requisição sai.
O QUIC funde o transporte e o handshake criptográfico em uma única troca, de modo que a requisição viaja junto com o handshake e a resposta volta com ele.
Um cliente que já se conectou antes pode enviar sua primeira requisição já no primeiro pacote, antes mesmo de o handshake terminar.
Um início rápido narrado e legendado: um servidor e um cliente HTTP/3, depois uma conexão QUIC pura com vários streams. Nada é baixado até você apertar o play.
Rode um servidor e um cliente HTTP/3 e abra uma conexão QUIC pura a partir do Delphi.
Use TsgcQUICClient e TsgcQUICServer para um transporte puro com o seu próprio framing, ou vá direto para TsgcHTTP3Client e TsgcHTTP3Server quando o formato de wire for HTTP.
TsgcQUICClient e TsgcQUICServer falam QUIC puro: múltiplos streams independentes em uma conexão criptografada, datagramas não confiáveis e migração de conexão quando o endereço IP do cliente muda no meio da sessão.
TsgcHTTP3Client e TsgcHTTP3Server colocam a semântica HTTP por cima: cabeçalhos de requisição e resposta comprimidos com QPACK, descoberta via Alt-Svc, e os mesmos métodos e códigos de status que o seu código HTTP/2 já usa.
Um cliente que já se conectou antes pode enviar sua primeira requisição já no primeiro pacote, antes mesmo de o handshake terminar.
Um connection ID identifica a sessão, não o endereço IP, então um celular que passa do Wi-Fi para os dados móveis mantém seus streams abertos.
Streams bidirecionais e datagramas não confiáveis sobre uma única requisição Extended CONNECT, para clientes de navegador que falam WebTransport.
O handshake de QUIC e TLS 1.3 roda no próprio mecanismo QUIC do OpenSSL 3.5. Não há nenhuma biblioteca QUIC separada para compilar ou distribuir.
O sgcQUIC não é uma implementação parcial. Transporte, framing, compressão de cabeçalhos e a extensão WebTransport, tudo coberto, sobre o mecanismo QUIC nativo do OpenSSL 3.5.
O protocolo de transporte QUIC: streams, datagramas, controle de fluxo e migração de conexão.
HTTP/3, a mesma semântica de requisição e resposta do HTTP/2, transportada sobre streams QUIC.
Compressão de cabeçalhos QPACK, projetada para a entrega fora de ordem de streams do QUIC.
WebTransport sobre HTTP/3, streams bidirecionais e datagramas em uma única requisição Extended CONNECT.
O mesmo formato de qualquer outro cliente HTTP do sgcWebSockets: defina propriedades, trate um evento, chame um método. O lado do servidor é um componente e um tratador.
uses
sgcHTTP3_Client;
var
vClient: TsgcHTTP3Client;
begin
vClient := TsgcHTTP3Client.Create(nil);
vClient.Host := 'api.example.com';
vClient.Port := 443;
vClient.OnResponse :=
procedure(Sender: TObject; const AStatus: Integer; const ABody: string)
begin
Memo1.Lines.Add(Format('%d: %s', [AStatus, ABody]));
end;
vClient.OnAltSvc :=
procedure(Sender: TObject; const AAltSvc: string)
begin
Memo1.Lines.Add('Alt-Svc: ' + AAltSvc); // h3 advertised over HTTP/2
end;
vClient.Connect;
vClient.Get('/pets/42');
end;
uses
sgcQUIC_Client;
var
vQUIC: TsgcQUICClient;
begin
vQUIC := TsgcQUICClient.Create(nil);
vQUIC.Host := 'quic.example.com';
vQUIC.Port := 4433;
vQUIC.EnableMultiStream := True;
vQUIC.OnQUICConnect :=
procedure(Sender: TObject)
var
vStreamId: Int64;
begin
vStreamId := vQUIC.OpenStream;
vQUIC.WriteData(vStreamId, 'ping');
end;
vQUIC.OnQUICStreamData :=
procedure(Sender: TObject; const AStreamId: Int64; const AData: string)
begin
Memo1.Lines.Add(Format('stream %d: %s', [AStreamId, AData]));
end;
vQUIC.Active := True;
end;
uses
sgcHTTP3_Server;
procedure TForm1.FormCreate(Sender: TObject);
begin
FServer := TsgcHTTP3Server.Create(nil);
FServer.Port := 443;
FServer.QUICOptions.SSLOptions.CertFile := 'server.crt';
FServer.QUICOptions.SSLOptions.KeyFile := 'server.key';
// One handler for every incoming HTTP/3 request
FServer.OnH3Request :=
procedure(const Ctx: TsgcHTTP3Context)
begin
if Ctx.Path = '/pets/42' then
Ctx.RespondJSON(200, '{"name":"Rex"}')
else
Ctx.Respond(404, 'Not found');
end;
FServer.Active := True;
end;
O cliente e o servidor compartilham o mesmo modelo de conexão, stream e datagrama nos dois lados. A matriz completa de recursos →
A licença, o canal de suporte e o ritmo de atualizações são os que você já tem. Toda licença inclui código-fonte completo, um ano de atualizações e implantação sem royalties.
1 licença de desenvolvedor. Uso em uma máquina por vez.
2 licenças de desenvolvedor. Uso em duas máquinas por vez.
Desenvolvedores ilimitados. Todas as máquinas da empresa.
O sgcQUIC requer o sgcWebSockets Enterprise, que você pode adicionar ao mesmo pedido. Cliente e servidor QUIC, cliente e servidor HTTP/3, QPACK, Alt-Svc e WebTransport, para Delphi, C++ Builder e .NET.
Ver preços e ediçõesConfiado por desenvolvedores Delphi, C++ Builder, Lazarus e .NET ao redor do mundo.
A biblioteca sgcWebSockets de vocês é muito útil e fácil de configurar. Continuem com o ótimo trabalho!
O sgcWebSockets é incrível e o suporte de vocês é o melhor!
Muito obrigado pela ajuda e pelo suporte, eu adoro os componentes de vocês.
Transporte QUIC bruto, cliente e servidor HTTP/3, e WebTransport, no mecanismo QUIC do OpenSSL 3.5. Código-fonte completo, implantação sem royalties, como um complemento do sgcWebSockets Enterprise.
O sgcQUIC compartilha convenções com as outras bibliotecas de componentes eSeGeCe para Delphi, C++ Builder e .NET. Elas vêm com código-fonte completo e são implantadas sem royalties.
WebSocket, HTTP/2, MQTT, AMQP, WebRTC, IA e 30+ integrações de API. A licença Enterprise sobre a qual o sgcQUIC é construído.
Componentes HTML e de UI server-side sobre Bootstrap 5 e htmx. Sirva a UI renderizada pelo mesmo transporte HTTP/3.
Componentes de IA, LLM e MCP para Delphi e C++ Builder. Sete provedores de LLM por trás de um único componente, além de MCP, embeddings e fala. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Componentes cliente de MQTT, AMQP 0.9.1 e 1.0, Apache Kafka e STOMP para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Cliente OAuth2, cliente JWT e suporte a WebAuthn para Delphi e C++ Builder. Independente, com o runtime sgcWebSockets Core embutido.
Servidor HTTP, cliente HTTP/2, cliente gRPC e clientes Google Cloud Pub/Sub, Calendar e FCM para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Servidor REST, servidor OpenAPI e componentes cliente OpenAPI para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.
Analisador OpenAPI 3.x, gerador nativo de SDK Pascal, componente servidor OpenAPI e mais de 1.195 SDKs de nuvem pré-compilados.
XAdES, PAdES, CAdES e ASiC para documentos, Authenticode, ClickOnce, NuGet e VSIX para código.
Crie, edite, visualize, assine, censure e valide arquivos PDF em Object Pascal puro, sem DLL para implantar. Licenciado separadamente.
Windows Hello, sensores de impressão digital e o Windows Biometric Framework para Delphi e C++ Builder.
Componentes Indy TCP/IP atualizados com TLS moderno, IPv6 e HTTP/2, do Delphi 7 ao 13.