ALPN

Compatible con

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*Requiere versión personalizada de Indy.

 

Application-Layer Protocol Negotiation (ALPN) es una extensión de Transport Layer Security (TLS) para la negociación de protocolos de capa de aplicación. ALPN permite que la capa de aplicación negocie qué protocolo debe ejecutarse sobre una conexión segura de manera que evita viajes de ida y vuelta adicionales y que es independiente de los protocolos de capa de aplicación. Es necesario para las conexiones HTTP/2 seguras, que mejoran la compresión de páginas web y reducen su latencia en comparación con HTTP/1.x.

 

Cliente

Puede configurar en TLSOptions.ALPNProtocols qué protocolos son admitidos por el cliente. Cuando el cliente se conecta al servidor, estos protocolos se envían en el 'Client Hello' inicial del protocolo de enlace TLS, y se listan los protocolos que el cliente admite; el servidor selecciona cuál protocolo se usará, si alguno.

 

Puede obtener el protocolo que ha seleccionado el servidor accediendo a la propiedad ALPNProtocol de TsgcWSConnectionClient.

 

Server

Cuando hay una nueva conexión TLS, se llama al evento OnSSLALPNSelect, aquí puede acceder a una lista de protocolos que son compatibles con el cliente y el servidor puede seleccionar cuál de ellos es compatible.

 

 

Si no hay soporte para ningún protocolo, aProtocol puede dejarse vacío.

 


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