Compatible con
*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.
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.
ServerCuando
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;