Dünkü gönderi ham sgcQUIC'teki QUIC aktarımını tanıttı. Bugün onun üzerinde yer alan katmana bakıyoruz: HTTP/3 (RFC 9114). İki bileşen, TsgcHTTP3Client ve TsgcHTTP3Server, modern web aktarımını Delphi, C++ Builder ve .NET'e getirir.
HTTP/3, HTTP/1.1 ve HTTP/2'den zaten bildiğiniz istek ve yanıt semantiğini korur, ancak bunları TCP yerine QUIC üzerinde çalıştırır. Başlıklar QPACK (RFC 9204) ile sıkıştırılır ve QUIC akışları bağımsız olarak çoğullamalı ilettiği için, kaybolan bir paket artık bağlantıdaki her isteği durdurmaz.
HTTP/3 İstemcisi
Bir ana bilgisayara bağlanın, ardından fiil yöntemlerinden birini çağırın. Get gövdeyi bir dize olarak döndürür ve durum kodu ile başlıklar dahil tam yanıt OnResponse'a iletilir.
uses
sgcHTTP3_Client;
var
oClient: TsgcHTTP3Client;
vBody: string;
begin
oClient := TsgcHTTP3Client.Create(nil);
oClient.OnResponse := OnResponse;
oClient.OnAltSvc := OnAltSvc;
oClient.Connect('www.example.com', 443);
vBody := oClient.Get('https://www.example.com/');
end;
procedure TForm1.OnResponse(Sender: TObject; aResponse: TsgcHTTP3Response);
begin
Memo1.Lines.Add('status ' + IntToStr(aResponse.StatusCode));
Memo1.Lines.Add(aResponse.GetDataAsString);
end;
Her HTTP fiili mevcuttur: Get, Head, Post, Put, Delete, Patch, Options, Trace, Connect ve Query. Her birinin, hemen dönen ve sonucu OnResponse aracılığıyla bildiren bir asenkron karşılığı vardır (GetAsync, PostAsync vb.).
QPACK ve Alt-Svc
QPACK, istek ve yanıt başlıklarını, özel kodlayıcı ve kod çözücü akışlarında taşınan dinamik bir tablo kullanarak sıkıştırır. Bunu Settings aracılığıyla ayarlayabilirsiniz:
oClient.Settings.QPACKMaxTableCapacity := 4096;
oClient.Settings.MaxFieldSectionSize := 65536;
Birçok sunucu ilk isteği hâlâ HTTP/1.1 veya HTTP/2 üzerinden yanıtlar ve HTTP/3'ü bir Alt-Svc başlığında (RFC 7838) duyurur. OnAltSvc olayı bu duyuruyu ortaya çıkarır, böylece bir istemci HTTP/3 uç noktasını keşfedebilir ve sonraki istekte yükseltebilir.
HTTP/3 Sunucusu
Sunucu, QUIC dinleyicisini ve sertifika seçeneklerini QUIC katmanından devralır, bu nedenle aynı şekilde, bir port ve bir PEM sertifikası ve anahtarı ile yapılandırılır. Her istek, yanıt nesnesini doldurduğunuz OnH3Request olayını tetikler.
uses
sgcHTTP3_Server;
var
oServer: TsgcHTTP3Server;
begin
oServer := TsgcHTTP3Server.Create(nil);
oServer.Port := 443;
oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
oServer.OnH3Request := OnH3Request;
oServer.Active := True;
end;
procedure TForm1.OnH3Request(Sender: TObject;
const aConnection: TsgcQUICServerConnection;
const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response);
begin
aResponse.StatusCode := 200;
aResponse.ContentType := 'text/plain';
aResponse.Data := TEncoding.UTF8.GetBytes('Hello from HTTP/3');
end;
Sunucu Push, Tüneller ve WebTransport
Bileşenler daha geniş HTTP/3 özellik setini de uygular. Bir sunucu, istemci istemeden önce PushPromise ile bir kaynağı gönderebilir ve istemci bunu OnPushPromise aracılığıyla alır. Genişletilmiş CONNECT (RFC 9220), bir HTTP/3 akışı üzerinden tüneller açar ve WebTransport, gerçek zamanlı uygulamalar için çift yönlü akışlar ve datagramlar sunmak üzere aynı mekanizmanın üzerine kurulur.
Kullanılabilirlik
sgcQUIC, sgcWebSockets Enterprise'a bir eklenti olarak lisanslanan ayrı bir pakettir ve hem QUIC hem de HTTP/3 bileşenlerini içerir. Her lisans, tam Pascal kaynak koduyla ve bir yıllık güncellemeyle birlikte gelir. Bileşenler SGC QUIC paletine kurulur ve Delphi ile C++ Builder 7'den 13'e kadar destekler, ayrıca aynı Tsgc sınıf adlarına sahip bir .NET port sunar.
Deneme sürümünü indirin ve tam referansı sgcQUIC ürün sayfasında okuyun.
Sorular veya geri bildirim? İletişime geçin, kodu yazan kişilerden yanıt alacaksınız.
