ALPN

Supported by

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*Vereist aangepaste Indy-versie.

 

Application-Layer Protocol Negotiation (ALPN) is een Transport Layer Security (TLS)-extensie voor onderhandeling op applicatielaagniveau. ALPN stelt de applicatielaag in staat te onderhandelen welk protocol via een beveiligde verbinding moet worden uitgevoerd, op een manier die extra rondreizigers vermijdt en onafhankelijk is van de applicatielaagprotocollen. Het is vereist door beveiligde HTTP/2-verbindingen, waardoor de compressie van webpagina's wordt verbeterd en de latentie wordt verminderd ten opzichte van HTTP/1.x.

 

Client

U kunt in TLSOptions.ALPNProtocols configureren welke protocollen door de client worden ondersteund. Wanneer de client verbinding maakt met de server, worden deze protocollen verzonden tijdens de initiële TLS-handshake 'Client Hello'; de server selecteert vervolgens welk protocol wordt gebruikt, indien van toepassing.

 

U kunt ophalen welk protocol door de server is geselecteerd via de eigenschap ALPNProtocol van TsgcWSConnectionClient.

 

Server

Wanneer er een nieuwe TLS-verbinding is, wordt de OnSSLALPNSelect-gebeurtenis aangeroepen, hier kunt u een lijst van protocollen raadplegen die door de client worden ondersteund en kan de server selecteren welke ervan wordt ondersteund.

 

 

Als er geen ondersteuning is voor een protocol, kan aProtocol leeg worden gelaten.

 


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