Pris en charge par
*Nécessite une version Indy personnalisée.
Application-Layer Protocol Negotiation (ALPN) est une extension Transport Layer Security (TLS) pour la négociation de protocole au niveau de la couche applicative. ALPN permet à la couche applicative de négocier le protocole à utiliser sur une connexion sécurisée de manière à éviter des allers-retours supplémentaires et qui est indépendante des protocoles de couche applicative. Elle est nécessaire pour les connexions HTTP/2 sécurisées, qui améliorent la compression des pages web et réduisent leur latence par rapport à HTTP/1.x.
Vous pouvez configurer dans TLSOptions.ALPNProtocols les protocoles pris en charge par le client. Lorsque le client se connecte au serveur, ces protocoles sont envoyés lors de la négociation TLS initiale « Client Hello », et il liste les protocoles que le client prend en charge, et le serveur sélectionne le protocole qui sera utilisé, le cas échéant.
Vous pouvez savoir quel protocole a été sélectionné par le serveur en accédant à la propriété ALPNProtocol de TsgcWSConnectionClient.
ServerLorsqu'il y a une nouvelle connexion TLS, l'événement OnSSLALPNSelect est appelé ; vous pouvez y accéder à la liste des protocoles pris en charge par le client, et le serveur peut sélectionner lequel d'entre eux est pris en charge.
Si aucun protocole n'est pris en charge,
aProtocol peut être laissé vide.
// 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;