TsgcHTTP3Client, QUIC üzerinden HTTP istekleri gönderen ve hem zaman uyumlu hem de zaman uyumsuz istek yöntemlerini destekleyen bir HTTP/3 istemcisidir (RFC 9114).
TsgcHTTP3Client, RFC 9114'te tanımlandığı şekliyle bir HTTP/3 istemcisi uygular. HTTP/3, HTTP isteklerini ve yanıtlarını yerleşik TLS 1.3 ile UDP tabanlı bir taşıma olan QUIC üzerinden taşır; böylece her istek şifreli, çoğullanmış bir bağlantı üzerinden kuyruk başı engelleme olmaksızın gönderilir. İstemci, OpenSSL 3.5 veya üzeri tarafından sağlanan yerel QUIC istemcisi üzerine kuruludur; bu nedenle harici bir HTTP/3 kütüphanesi gerekmez.
Bileşen istekleri zaman uyumlu (çağrı bloke eder ve yanıt gövdesini döndürür) veya zaman uyumsuz (çağrı hemen döner ve yanıt OnResponse olayına iletilir) olarak gönderebilir.
Zaman uyumlu bir istek göndermek için aşağıdaki adımları izleyin:
1. TsgcHTTP3Client'in yeni bir örneğini oluşturun ve sunucunun Host ve Port'unu ayarlayın.
2. QUIC bağlantısını açmak için Connect'i çağırın, (yanıt gövdesini döndüren) Get ile isteği gönderin ve bittiğinde Disconnect'i çağırın. örnek:
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;
İsteği zaman uyumsuz olarak göndermek için OnResponse olayını atayın ve GetAsync metodunu çağırın; çağrı hemen geri döner ve yanıt olay üzerinden iletilir. örnek:
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;
| Name | Açıklama |
|---|---|
| Host | İstemcinin bağlanacağı HTTP/3 sunucusunun IP adresi veya DNS adı. |
| Port | HTTP/3 (QUIC) sunucusuna bağlanmak için kullanılan UDP portu. |
| ConnectTimeout | İstemcinin QUIC ve TLS 1.3 el sıkışmasının tamamlanması için beklediği maksimum süre (milisaniye cinsinden). |
| TLSOptions | QUIC bağlantısı tarafından kullanılan TLS 1.3 parametrelerini (sertifikalar, doğrulama, ALPN) yapılandırır. |
| Settings | Bağlantı kurulduğunda SETTINGS çerçevesinde sunucuya duyurulan HTTP/3 ayarları. |
| Name | Açıklama |
|---|---|
| Connect | QUIC bağlantısını açar ve TLS 1.3 ile HTTP/3 el sıkışmasını gerçekleştirir. |
| Get | Zaman uyumlu bir HTTP/3 GET isteği gönderir ve yanıt gövdesini döndürür. |
| Post | Gövde yükü ile zaman uyumlu bir HTTP/3 POST isteği gönderir. |
| GetAsync | Engellemesiz bir HTTP/3 GET gönderir; yanıt OnResponse üzerinden gelir. |
| Disconnect | HTTP/3 (QUIC) bağlantısını kapatır. |
| Name | Açıklama |
|---|---|
| OnResponse | İstemci sunucudan tam yanıtı (durum, başlıklar ve gövde) aldığında tetiklenir. |
| OnError | Bir istek veya bağlantı hatası oluştuğunda tetiklenir. |
| OnConnect | HTTP/3 bağlantısı kurulduktan sonra tetiklenir. |
| OnDisconnect | HTTP/3 bağlantısı kapatıldıktan sonra tetiklenir. |
Aşağıdaki örnek bir HTTP/3 bağlantısı açar, bir GET ve bir POST isteği gönderir ve bağlantıyı kapatır.
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 koşullu tanımını etkin olarak derleyin.sgcHTTP3_Client birimini uses yan tümcesine ekleyin.TLSOptions.IOHandler = iohOpenSSL (varsayılan) ile yerel QUIC istemcisini sağlayan OpenSSL 3.5 veya üzeri gerektirir; motor otomatik seçilir, önce yerleşik OpenSSL QUIC motoru, yedek olarak sgc QUIC motoru. TLSOptions.IOHandler = iohNativeTLS ile sgc motoru, yerel TLS 1.3 el sıkışması ve yerel paket koruması kullanılır; OpenSSL hiç yüklenmez. sgc motoru ayrıca HTTP/3 kontrol ve QPACK akışlarını açar ve sonraki istekler için aynı QUIC bağlantısını yeniden kullanır.