ALPN

サポート対象

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*カスタム Indy バージョンが必要です。

 

Application-Layer Protocol Negotiation(ALPN)は、アプリケーション層のプロトコルネゴシエーションのためのTransport Layer Security (TLS)拡張です。ALPNを使用すると、 アプリケーション層は、追加のラウンドトリップを回避し、 アプリケーション層プロトコルから独立した方法で、セキュアな接続上で実行すべきプロトコルをネゴシエートできます。 これは、Webページの圧縮を改善し、HTTP/1.xと比較してレイテンシを削減する セキュアなHTTP/2接続に必要です。

 

クライアント

TLSOptions.ALPNProtocolsで、クライアントがサポートするプロトコルを構成できます。 クライアントがサーバーに接続すると、これらのプロトコルは初期TLSハンドシェイクの「Client Hello」で送信され、 クライアントがサポートするプロトコルがリストされます。サーバーは、 どのプロトコルを使用するかを選択します(存在する場合)。

 

TsgcWSConnectionClient の ALPNProtocol プロパティにアクセスすることで、サーバーによって選択されたプロトコルを取得できます。

 

Server

新しい TLS 接続がある場合、OnSSLALPNSelect イベントが呼び出されます。ここでクライアントがサポートするプロトコルのリストにアクセスでき、サーバーはその中からサポートするプロトコルを選択できます。

 

 

プロトコルのサポートがない場合、aProtocol は空にできます。

 


// Client
procedure OnClientConnect(Connection: TsgcWSConnection);
var
  vProtocol: string;
begin
  vProtocol := TsgcWSConnectionClient(Connection).ALPNProtocol;
end;
 
// Server
procedure OnSSLALPNSelect(Sender: TObject; aProtocols: TStringList; var aProtocol: string);
var
  i: integer;
begin
  for i := 0 to aProtocols.count - 1 do
  begin 
    if aProtocols[i] = 'h2' then
    begin
      aProtocol := 'h2';
      break;
    end;
  end;
end;