TsgcHTTP3Client è un client HTTP/3 (RFC 9114) che invia richieste HTTP su QUIC e supporta sia metodi di richiesta sincroni che asincroni.
TsgcHTTP3Client implementa un client HTTP/3 come definito in RFC 9114. HTTP/3 trasporta richieste e risposte HTTP tramite QUIC (un trasporto basato su UDP con TLS 1.3 integrato), quindi ogni richiesta viene inviata su una connessione crittografata e multiplexata senza head-of-line blocking. Il client è basato sul client QUIC nativo fornito da OpenSSL 3.5 o successivo, quindi non è richiesta alcuna libreria HTTP/3 esterna.
Il componente può inviare richieste in modo sincrono (la chiamata si blocca e restituisce il corpo della risposta) o asincrono (la chiamata ritorna immediatamente e la risposta viene consegnata sull'evento OnResponse).
Seguire i passaggi seguenti per inviare una richiesta sincrona:
1. Creare una nuova istanza di TsgcHTTP3Client e impostare Host e Port del server.
2. Chiamare Connect per aprire la connessione QUIC, inviare la richiesta con Get (che restituisce il corpo della risposta) e chiamare Disconnect al termine. esempio:
oClient := TsgcHTTP3Client.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.Connect(oClient.Host, oClient.Port);
vResponse := oClient.Get('https://www.example.com/');
ShowMessage(vResponse);
oClient.Disconnect;
Per inviare la richiesta in modo asincrono, assegnare l'evento OnResponse e chiamare GetAsync; la chiamata ritorna immediatamente e la risposta viene consegnata sull'evento. esempio:
oClient := TsgcHTTP3Client.Create(nil);
oClient.OnResponse := OnResponseEvent;
oClient.GetAsync('https://www.example.com/');
procedure OnResponseEvent(Sender: TObject; const Response: TsgcHTTP3Response);
begin
ShowMessage(Response.DataString);
end;
| Nome | Descrizione |
|---|---|
| Host | Indirizzo IP o nome DNS del server HTTP/3 a cui il client si connetterà. |
| Port | Porta UDP usata per connettersi al server HTTP/3 (QUIC). |
| ConnectTimeout | Tempo massimo in millisecondi che il client attende per il completamento dell'handshake QUIC e TLS 1.3. |
| TLSOptions | Configura i parametri TLS 1.3 (certificati, verifica, ALPN) utilizzati dalla connessione QUIC. |
| Settings | Parametri SETTINGS di HTTP/3 annunciati al server quando la connessione viene stabilita. |
| Nome | Descrizione |
|---|---|
| Connect | Apre la connessione QUIC ed esegue l'handshake TLS 1.3 e HTTP/3. |
| Get | Invia una richiesta HTTP/3 GET sincrona e restituisce il corpo della risposta. |
| Post | Invia una richiesta HTTP/3 POST sincrona con un payload nel corpo. |
| GetAsync | Invia una GET HTTP/3 non bloccante; la risposta arriva su OnResponse. |
| Disconnect | Chiude la connessione HTTP/3 (QUIC). |
| Nome | Descrizione |
|---|---|
| OnResponse | Si attiva quando il client riceve la risposta completa (stato, intestazioni e corpo) dal server. |
| OnError | Si attiva quando si verifica un errore di richiesta o di connessione. |
| OnConnect | Si attiva dopo che la connessione HTTP/3 è stata stabilita. |
| OnDisconnect | Si attiva dopo che la connessione HTTP/3 è stata chiusa. |
L'esempio seguente apre una connessione HTTP/3, invia una richiesta GET e una POST e chiude la connessione.
var
oClient: TsgcHTTP3Client;
vResponse: string;
begin
oClient := TsgcHTTP3Client.Create(nil);
try
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.ConnectTimeout := 10000;
oClient.Connect(oClient.Host, oClient.Port);
if oClient.Connected then
begin
vResponse := oClient.Get('https://www.example.com/');
ShowMessage(vResponse);
vResponse := oClient.Post('https://www.example.com/api', 'name=value',
'application/x-www-form-urlencoded');
ShowMessage(vResponse);
end;
oClient.Disconnect;
finally
oClient.Free;
end;
end;
SGC_HTTP3 abilitata.sgcHTTP3_Client alla clausola uses.TLSOptions.IOHandler = iohOpenSSL (l'impostazione predefinita). Il motore viene quindi rilevato al caricamento di OpenSSL: prima il motore QUIC integrato di OpenSSL, poi il motore QUIC sgc come fallback. Con TLSOptions.IOHandler = iohNativeTLS vengono usati il motore sgc, l'handshake TLS 1.3 nativo e la protezione nativa dei pacchetti, e OpenSSL non viene caricato. Il motore sgc apre inoltre gli stream di controllo e QPACK di HTTP/3 e riutilizza una singola connessione QUIC per le richieste successive.