ALPN

Unterstützt von

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*Erfordert die benutzerdefinierte Indy-Version.

 

Application-Layer Protocol Negotiation (ALPN) ist eine Transport-Layer-Security-(TLS-)Erweiterung für die Aushandlung von Anwendungsschichtprotokollen. ALPN ermöglicht es der Anwendungsschicht auszuhandeln, welches Protokoll über eine sichere Verbindung ausgeführt werden soll, und zwar auf eine Weise, die zusätzliche Round-Trips vermeidet und die unabhängig von den Anwendungsschichtprotokollen ist. Sie wird von sicheren HTTP/2-Verbindungen benötigt, was die Komprimierung von Webseiten verbessert und ihre Latenz im Vergleich zu HTTP/1.x reduziert.

 

Client

Sie können in TLSOptions.ALPNProtocols konfigurieren, welche Protokolle vom Client unterstützt werden. Wenn sich der Client mit dem Server verbindet, werden diese Protokolle im anfänglichen TLS-Handshake 'Client Hello' gesendet, und es werden die Protokolle aufgelistet, die der Client unterstützt, und der Server wählt aus, welches Protokoll verwendet wird, falls überhaupt.

 

Sie können erfahren, welches Protokoll vom Server ausgewählt wurde, indem Sie auf die Eigenschaft ALPNProtocol von TsgcWSConnectionClient zugreifen.

 

Server

Wenn es eine neue TLS-Verbindung gibt, wird das Ereignis OnSSLALPNSelect aufgerufen; hier können Sie auf eine Liste von Protokollen zugreifen, die vom Client unterstützt werden, und der Server kann auswählen, welches davon unterstützt wird.

 

 

Wenn es keine Unterstützung für ein Protokoll gibt, kann aProtocol leer gelassen werden.

 


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