TsgcHTTP3Client は QUIC 上で HTTP リクエストを送信する HTTP/3 クライアント(RFC 9114)で、同期および非同期の両方のリクエストメソッドをサポートしています。
TsgcHTTP3Client は RFC 9114 で定義された HTTP/3 クライアントを実装しています。HTTP/3 は QUIC(TLS 1.3 を内蔵した UDP ベースのトランスポート)上で HTTP リクエストとレスポンスを転送するため、すべてのリクエストはヘッドオブラインブロッキングなしで暗号化された多重化接続を通じて送信されます。このクライアントは OpenSSL 3.5 以降が提供するネイティブ QUIC クライアント上に構築されているため、外部の HTTP/3 ライブラリは不要です。
このコンポーネントはリクエストを同期的に(呼び出しがブロックしてレスポンスボディを返す)または非同期的に(呼び出しが即座に返り、レスポンスが OnResponse イベントで通知される)送信できます。
同期リクエストを送信するには、以下の手順に従ってください:
1. TsgcHTTP3Client の新しいインスタンスを作成し、サーバーの Host と Port を設定します。
2. Connect を呼び出して QUIC 接続を開き、Get でリクエストを送信し(レスポンスボディを返します)、完了したら Disconnect を呼び出します。使用例:
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;
リクエストを非同期で送信するには、OnResponse イベントを割り当てて GetAsync を呼び出します。呼び出しは即座に返り、レスポンスはイベントで通知されます。使用例:
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;
| 名前 | 説明 |
|---|---|
| Host | クライアントが接続する HTTP/3 サーバーの IP アドレスまたは DNS 名。 |
| Port | HTTP/3(QUIC)サーバーへの接続に使用する UDP ポート。 |
| ConnectTimeout | クライアントが QUIC および TLS 1.3 ハンドシェイクの完了を待機する最大時間(ミリ秒)。 |
| TLSOptions | QUIC 接続で使用される TLS 1.3 パラメーター(証明書、検証、ALPN)を設定します。 |
| Settings | 接続確立時にサーバーに通知される HTTP/3 SETTINGS パラメータ。 |
| 名前 | 説明 |
|---|---|
| Connect | QUIC 接続を開き、TLS 1.3 および HTTP/3 ハンドシェイクを実行します。 |
| Get | 同期 HTTP/3 GET リクエストを送信し、レスポンスボディを返します。 |
| Post | ボディペイロードを含む同期 HTTP/3 POST リクエストを送信します。 |
| GetAsync | ノンブロッキングの HTTP/3 GET を送信します。返信は OnResponse で到着します。 |
| Disconnect | HTTP/3(QUIC)接続を閉じます。 |
| 名前 | 説明 |
|---|---|
| OnResponse | クライアントがサーバーからの完全なレスポンス (ステータス、ヘッダー、ボディ) を受信したときに発生します。 |
| OnError | リクエストまたは接続エラーが発生したときに発生します。 |
| OnConnect | HTTP/3 接続が確立された後に発生します。 |
| OnDisconnect | HTTP/3 接続が閉じられた後に発生します。 |
次の使用例は HTTP/3 接続を開き、GET および POST リクエストを送信して接続を閉じます。
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 を有効にしてコンパイルします。sgcHTTP3_Client を uses 句に追加します。TLSOptions.IOHandler = iohOpenSSL(デフォルト)の場合、ネイティブ QUIC を提供する最初のリリースである OpenSSL 3.5 以降が必要です。エンジンは OpenSSL の読み込み時に検出されます: まず組み込みの OpenSSL QUIC エンジン、利用できない場合は sgc QUIC エンジンがフォールバックとして使われます。TLSOptions.IOHandler = iohNativeTLS では sgc エンジン、ネイティブ TLS 1.3 ハンドシェイク、ネイティブのパケット保護が使用され、OpenSSL は読み込まれません。sgc エンジンは HTTP/3 の制御ストリームと QPACK ストリームも開き、以降のリクエストのために 1 つの QUIC 接続を再利用します。