Supported by
*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.
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.
ServerWanneer
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;