HTTP/2 Server

TsgcWebSocketHTTPServer を使用して、単一の TLS ポート上で HTTP/1.1 および WebSocket と並行して HTTP/2(h2)を提供できます。ALPN ネゴシエーション、HPACK、ストリームの多重化を内蔵しています。

TsgcWebSocketHTTPServer

WebSocket および HTTP/1.1 で使用する同じ TsgcWebSocketHTTPServer が TLS 上の HTTP/2 も提供します。Specifications.HTTP2 を有効にするだけで、ALPN が残りを処理します。

コンポーネントクラス

TsgcWebSocketHTTPServer

プロトコル

HTTP/2 (RFC 9113)

対応プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Professional / Enterprise

1 つのプロパティで HTTP/2 を有効にする

TsgcWebSocketHTTPServer インスタンスで TLS を有効にし、Specifications.HTTP2 を切り替えてください。ALPN h2 ネゴシエーションが自動的にアップグレードを処理します。

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';

  // Allow HTTP/1.1, HTTP/2 and WebSocket on the same port
  Server.Specifications.HTTP   := True;
  Server.Specifications.HTTP2  := True;
  Server.Specifications.RFC6455 := True;

  Server.OnCommandGet := procedure(AContext: TIdContext;
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo)
  begin
    AResponseInfo.ContentText := 'Hello over HTTP/' + IfThen(ARequestInfo.HTTP2, '2', '1.1');
  end;

  Server.Active := True;
end;
// uses: sgcWebSocket
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
Server->Port = 443;
Server->SSL  = true;
Server->Specifications->HTTP2 = true;
Server->Active = true;

主な機能

HTTP/2 が有効な TsgcWebSocketHTTPServer です。HTTP/1.1、HTTP/2、WebSocket の間で 1 つの TLS エンドポイントを共有できます。

ALPN ネゴシエーション

TLS ハンドシェイク中に、サーバーは http/1.1h2 の両方をアドバタイズします。クライアントがプロトコルを選択し、サーバーが適切にディスパッチします。別のリスニングソケットは不要です。

WebSocket との共存

WebSocket クライアントは引き続き HTTP/1.1 パスを通じてアップグレードします。RFC 8441(HTTP/2 を使用した WebSocket のブートストラップ)は Specifications.RFC8441 でサポートされています。

HPACK + ストリームフレーミング

レスポンスヘッダー用の組み込み HPACK エンコーダーと、優先度ヒントを尊重しながら各リクエストを独自のストリーム ID でディスパッチするストリーム多重化コアを搭載しています。

サーバープッシュ

サーバープッシュ(PUSH_PROMISE)はサポートされていますが、現在は非推奨です。モダンなクライアントはこれを無視するため、代わりに 103 Early Hints または HTTP/3 の使用を検討してください。

TLS の選択

SSLOptions.IOHandleriohOpenSSL(クロスプラットフォーム)または iohSChannel(Windows)に設定してください。HTTP/2 は RFC 7540 / 9113 のデプロイメント要件として TLS 1.2 以上が必要です。

接続メトリクス

各 HTTP/2 接続は、OnHTTP2Settings を通じてストリーム数、RTT 推定値、総送受信バイト数、ネゴシエートされた SETTINGS フレームパラメーターを公開します。

仕様・参考資料

このコンポーネントが実装するプロトコルの公式ソースです。

ドキュメント・デモ

コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。

オンラインヘルプ — TsgcWebSocketHTTPServer このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\20.HTTP_Protocol\01.HTTP2_Server_And_Client すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。
技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。
ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。

Delphi から HTTP/2 を提供してみませんか?

体験版をダウンロードして、単一の TLS エンドポイントから HTTP/1.1、HTTP/2、WebSocket を提供してください。