ALPN

Supportato da

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*Richiede una versione personalizzata di Indy.

 

Application-Layer Protocol Negotiation (ALPN) è un'estensione Transport Layer Security (TLS) per la negoziazione del protocollo a livello applicazione. ALPN consente al livello applicazione di negoziare quale protocollo deve essere eseguito su una connessione sicura in modo da evitare round trip aggiuntivi e che è indipendente dai protocolli del livello applicazione. È necessario per le connessioni HTTP/2 sicure, che migliorano la compressione delle pagine web e ne riducono la latenza rispetto a HTTP/1.x.

 

Client

È possibile configurare in TLSOptions.ALPNProtocols quali protocolli sono supportati dal client. Quando il client si connette al server, questi protocolli vengono inviati nell'handshake TLS iniziale 'Client Hello', elencando i protocolli supportati dal client, e il server seleziona il protocollo da utilizzare, se disponibile.

 

È possibile sapere quale protocollo è stato selezionato dal server accedendo alla proprietà ALPNProtocol di TsgcWSConnectionClient.

 

Server

Quando c'è una nuova connessione TLS, viene chiamato l'evento OnSSLALPNSelect, qui puoi accedere a un elenco di protocolli supportati dal client e il server può selezionare quale di essi è supportato.

 

 

Se non c'è supporto per alcun protocollo, aProtocol può essere lasciato vuoto.

 


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