Unterstützt von
*Erfordert die benutzerdefinierte Indy-Version.
Application-Layer Protocol Negotiation (ALPN) ist eine Transport-Layer-Security-(TLS-)Erweiterung für die Aushandlung von Anwendungsschichtprotokollen. ALPN ermöglicht es der Anwendungsschicht auszuhandeln, welches Protokoll über eine sichere Verbindung ausgeführt werden soll, und zwar auf eine Weise, die zusätzliche Round-Trips vermeidet und die unabhängig von den Anwendungsschichtprotokollen ist. Sie wird von sicheren HTTP/2-Verbindungen benötigt, was die Komprimierung von Webseiten verbessert und ihre Latenz im Vergleich zu HTTP/1.x reduziert.
Sie können in TLSOptions.ALPNProtocols konfigurieren, welche Protokolle vom Client unterstützt werden. Wenn sich der Client mit dem Server verbindet, werden diese Protokolle im anfänglichen TLS-Handshake 'Client Hello' gesendet, und es werden die Protokolle aufgelistet, die der Client unterstützt, und der Server wählt aus, welches Protokoll verwendet wird, falls überhaupt.
Sie können erfahren, welches Protokoll vom Server ausgewählt wurde, indem Sie auf die Eigenschaft ALPNProtocol von TsgcWSConnectionClient zugreifen.
ServerWenn
es eine neue TLS-Verbindung gibt, wird das Ereignis OnSSLALPNSelect aufgerufen; hier
können Sie auf eine Liste von Protokollen zugreifen, die vom Client unterstützt werden, und der Server
kann auswählen, welches davon unterstützt wird.
Wenn es keine Unterstützung für
ein Protokoll gibt, kann aProtocol leer gelassen werden.
// 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;