ALPN

Suportado por

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*Requer versão personalizada do Indy.

 

Application-Layer Protocol Negotiation (ALPN) é uma extensão do Transport Layer Security (TLS) para negociação de protocolo de camada de aplicação. O ALPN permite que a camada de aplicação negocie qual protocolo deve ser executado sobre uma conexão segura de uma maneira que evita round trips adicionais e que é independente dos protocolos de camada de aplicação. É necessário por conexões HTTP/2 seguras, que melhoram a compressão de páginas web e reduzem sua latência em comparação com o HTTP/1.x.

 

Client

Você pode configurar em TLSOptions.ALPNProtocols quais protocolos são suportados pelo cliente. Quando o cliente conecta ao servidor, esses protocolos são enviados no 'Client Hello' inicial do handshake TLS, listando os protocolos que o cliente suporta, e o servidor seleciona qual protocolo será utilizado, se algum.

 

Você pode obter qual protocolo foi selecionado pelo servidor acessando a propriedade ALPNProtocol do TsgcWSConnectionClient.

 

Server

Quando há uma nova conexão TLS, o evento OnSSLALPNSelect é chamado, aqui você pode acessar uma lista de protocolos que são suportados pelo cliente e o servidor pode selecionar qual deles é suportado.

 

 

Se não houver suporte para nenhum protocolo, aProtocol pode ser deixado vazio.

 


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