지원 대상
*사용자 지정 Indy 버전이 필요합니다.
Application-Layer Protocol Negotiation (ALPN)은 애플리케이션 계층 프로토콜 협상을 위한 Transport Layer Security (TLS) 확장입니다. ALPN을 사용하면 애플리케이션 계층이 추가 왕복을 피하는 방식으로 보안 연결을 통해 수행되어야 할 프로토콜을 협상할 수 있으며, 이는 애플리케이션 계층 프로토콜과 독립적입니다. 이는 보안 HTTP/2 연결에 필요하며, HTTP/1.x에 비해 웹 페이지의 압축을 개선하고 지연 시간을 줄입니다.
TLSOptions.ALPNProtocols에서 클라이언트가 지원하는 프로토콜을 구성할 수 있습니다. 클라이언트가 서버에 연결하면 이러한 프로토콜이 초기 TLS 핸드셰이크 'Client Hello'에서 전송되며, 클라이언트가 지원하는 프로토콜을 나열하고 서버가 어떤 프로토콜을 사용할지 선택합니다(있는 경우).
TsgcWSConnectionClient의 ALPNProtocol 속성에 액세스하여 서버가 어떤 프로토콜을 선택했는지 얻을 수 있습니다.
Server새로운 TLS 연결이
있을 때 OnSSLALPNSelect 이벤트가 호출되며, 여기에서
클라이언트가 지원하는 프로토콜 목록에 액세스할 수 있고 서버는
그 중 어떤 것을 지원할지 선택할 수 있습니다.
어떤 프로토콜도
지원하지 않는 경우, aProtocol은 비워 둘 수 있습니다.
// 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;