HTTP/2 プロトコル
Delphi および C++Builder 向けのネイティブ HTTP/2 クライアントとサーバーです。バイナリフレーミング、ストリーム多重化、HPACK ヘッダー圧縮、ALPN ネゴシエーションを備え、IIS、Apache、Indy への依存はありません。
Delphi および C++Builder 向けのネイティブ HTTP/2 クライアントとサーバーです。バイナリフレーミング、ストリーム多重化、HPACK ヘッダー圧縮、ALPN ネゴシエーションを備え、IIS、Apache、Indy への依存はありません。
本番運用に対応した 2 つのコンポーネントが、HTTP/2 (RFC 9113) のワイヤープロトコルを完全に実装しています。クライアントは HTTP/2 API を利用するために、サーバーは HTTP/2 API を公開するために使用します。同じアプリケーション内で両方を併用することも可能です。
ネイティブな HTTP/2 クライアントです。単一の TLS 接続上で GET/POST/PUT/DELETE を多重化し、HPACK によるヘッダー圧縮、ALPN による h2 へのアップグレード、または事前知識モードでの h2c、サーバープッシュの処理、Bearer / Basic / NTLM 認証をサポートします。
ネイティブな HTTP/2 サーバーです。同じ WebSocket HTTP サーバーが、1 つの TLS ポート上で HTTP/1.1、HTTP/2 (h2)、WebSocket を提供します。ALPN ネゴシエーション、ストリーム多重化、HPACK レスポンス、オプションの RFC 8441 による WebSocket-over-HTTP/2 ブートストラップに対応します。
HTTP/2 フレーミングをクライアントと WebSocket HTTP サーバーの両方に組み込んだ、本格的な実装です。
TsgcHTTP2ClientTsgcWebSocketHTTPServer
Windows、macOS、Linux、iOS、Android
クライアント: Standard / Pro / Enterprise
サーバー: Pro / Enterprise
HTTP/1.1 に対する HTTP/2 のすべての利点を、ネイティブな Delphi / C++Builder コードで利用できます。別の Web サーバーを起動する必要はありません。
リクエストとレスポンスはバイナリフレームに分割され、決定的なステートマシンによって解析されます。テキスト行のパースや HTTP/1.1 のあいまいさはもう必要ありません。
処理中の多数のリクエストが 1 つの TCP/TLS 接続を共有します。HTTP レイヤーでヘッドオブラインブロッキングが発生せず、リクエストごとに追加のソケットを必要としません。
HPACK エンコーダー / デコーダーを標準搭載しています (RFC 7541)。Cookie、認証トークン、Content-Type ヘッダーなど繰り返し送信される値は、初回リクエスト以降はほぼゼロバイトのコストで送信できます。
TLS ハンドシェイク中に相手側が h2 と http/1.1 をアドバタイズし、ネゴシエートされた ALPN 値によってプロトコルが選択されます。ラウンドトリップを無駄にしません。
信頼できる内部リンクやサービスメッシュのサイドカーでは、双方が ALPN をスキップし、HTTP2_PriorKnowledge を介して平文で HTTP/2 を開始できます。
サーバーはプロアクティブに PUSH_PROMISE レスポンスを送信できます。クライアントはそれらを OnHTTP2StreamData を通じてキャッシュ用に取得します。注意: 公開 Web では非推奨ですが、内部利用では引き続き有用です。
ストリームごとの優先度と依存関係のヒントにより、認証、ナビゲーション、JSON-RPC の結果などの重要なレスポンスを、同じ接続上でバルク転送よりも優先して処理できます。
ストリーム単位および接続単位の WINDOW_UPDATE フロー制御により、1 つの大きなレスポンスが小さなレスポンスを枯渇させることを防ぎます。SETTINGS フレームで調整可能です。
TLSOptions.IOHandler を iohSChannel に設定すれば Windows カーネル TLS (DLL 不要)、iohOpenSSL に設定すればクロスプラットフォームで TLS 1.2/1.3 を完全にサポートします。
HTTP/2 の多重化と HPACK による削減効果がすぐに得られる、すぐに導入できるシナリオです。
Apple の APNs プロバイダー API は HTTP/2 を必須とします。TsgcHTTP2Client はトークンベース認証で Apple Push コンポーネントをエンドツーエンドで駆動します。
Google の FCM HTTP v1 API は HTTP/2 上で動作します。同じコンポーネントが、サービスアカウントの JWT 発行により FCM を駆動します。
ほとんどのクラウド API (Stripe、GitHub、Cloudflare、Google、Azure…) はデフォルトで HTTP/2 を話します。多重化対応クライアントは並列呼び出しのレイテンシを削減できます。
サイドカーメッシュの背後にある内部マイクロサービスでは、HTTP/2 の事前知識モード (h2c) を利用して、数百の RPC ストリームを 1 つのソケット上で多重化できます。
TsgcWebSocketHTTPServer は単一の TLS エンドポイント上で HTTP/1.1、HTTP/2、WebSocket を提供します。ALPN が各接続を自動的にルーティングします。
WebSocket フレームを HTTP/2 ストリーム内にトンネリングしたいクライアント向けに、サーバー側で Specifications.RFC8441 を有効化できます。
コンポーネントを配置し、TLS を設定するだけで動作します。ハンドシェイク中に ALPN が h2 を自動でネゴシエートします。
uses
sgcHTTP, sgcHTTP2;
var
HTTP2: TsgcHTTP2Client;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.TLSOptions.IOHandler := iohSChannel; // または iohOpenSSL
HTTP2.TLSOptions.Version := tls1_2;
// カスタムヘッダーを追加 (HPACK で圧縮されます)
HTTP2.Request.CustomHeaders.Add('authorization: Bearer eyJ...');
// HTTP/2 経由の GET (ALPN が h2 をネゴシエート)
Memo1.Text := HTTP2.Get('https://api.example.com/v1/items');
ShowMessage(IntToStr(HTTP2.Response.Status));
end;
uses
sgcWebSocket;
var
Server: TsgcWebSocketHTTPServer;
begin
Server := TsgcWebSocketHTTPServer.Create(nil);
Server.Port := 443;
Server.SSL := True;
Server.SSLOptions.CertFile := 'cert.pem';
Server.SSLOptions.KeyFile := 'key.pem';
// HTTP/1.1、HTTP/2、WebSocket を同じ TLS ポートで提供
Server.Specifications.HTTP := True;
Server.Specifications.HTTP2 := True;
Server.Specifications.RFC6455 := True;
Server.Active := True;
end;
// uses: sgcHTTP, sgcHTTP2
TsgcHTTP2Client *HTTP2 = new TsgcHTTP2Client(this);
HTTP2->TLSOptions->IOHandler = iohSChannel;
HTTP2->Request->CustomHeaders->Add("authorization: Bearer eyJ...");
Memo1->Text = HTTP2->Get("https://api.example.com/v1/items");
コンポーネントページ、オンラインヘルプ、トライアルに同梱されているすぐに実行できるデモプロジェクトへのディープリンクです。
| HTTP/2 クライアント — TsgcHTTP2Client コンポーネントページ: クライアントの機能、コードサンプル、TLS オプションを紹介します。 | 開く | |
| HTTP/2 サーバー — TsgcWebSocketHTTPServer コンポーネントページ: 1 つの TLS ポート上で HTTP/1.1 や WebSocket と並行して HTTP/2 を有効化する方法を解説します。 | 開く | |
| オンラインヘルプ — HTTP/2 HTTP/2 コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\20.HTTP_Protocol\01.HTTP2_Server_And_Client すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記からトライアルをダウンロードしてください。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅する包括的なマニュアルです。 | 開く |