Delphi ve C++ Builder için HTTP/3 İstemci ve Sunucu Bileşenleri | eSeGeCe Blog

Delphi ve C++ Builder için HTTP/3 İstemci ve Sunucu Bileşenleri

· Bileşenler
sgcQUIC HTTP/3 istemci ve sunucu bileşenleri

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.