Obsługiwane przez
*Wymaga niestandardowej wersji Indy.
Application-Layer Protocol Negotiation (ALPN) to rozszerzenie Transport Layer Security (TLS) do negocjacji protokołów warstwy aplikacji. ALPN umożliwia warstwie aplikacji negocjację protokołu, który ma być używany przez bezpieczne połączenie, bez dodatkowych rund i niezależnie od protokołów warstwy aplikacji. Jest wymagane przez bezpieczne połączenia HTTP/2, które poprawiają kompresję stron internetowych i zmniejszają opóźnienia w porównaniu z HTTP/1.x.
W opcji TLSOptions.ALPNProtocols można skonfigurować protokoły obsługiwane przez klienta. Gdy klient łączy się z serwerem, protokoły te są wysyłane podczas początkowego uzgadniania TLS „Client Hello"; klient podaje listę obsługiwanych przez siebie protokołów, a serwer wybiera, który protokół zostanie użyty, jeśli którykolwiek.
Wybrany przez serwer protokół można sprawdzić, uzyskując dostęp do właściwości ALPNProtocol obiektu TsgcWSConnectionClient.
ServerGdy pojawi się nowe połączenie TLS, wywoływane jest zdarzenie OnSSLALPNSelect, w którym można uzyskać dostęp do listy protokołów obsługiwanych przez klienta i wybrać jeden z nich po stronie serwera.
Jeśli żaden protokół nie jest obsługiwany, parametr aProtocol może pozostać pusty.
// 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;