Supportato da
*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.
È 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.
ServerQuando
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;