ALPN

Obsługiwane przez

 

TsgcWebSocketServer

TsgcWebSocketHTTPServer

TsgcWebSocketClient

 

*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.

 

Klient

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.

 

Server

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