TsgcHTTPServer › 속성 › HTTP3Options

HTTP3Options 속성

HTTP/1.1 및 HTTP/2와 함께 UDP를 통해 HTTP 요청을 처리하는 HTTP/3(QUIC) 리스너를 활성화합니다.

구문

property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;

기본값

Enabled=False, Port=0, Host='', AltSvc.Enabled=True

설명

기본적으로 서버는 HTTP/3을 수신 대기하지 않습니다. 기존 TCP/TLS 리스너와 함께 QUIC 리스너를 열려면 HTTP3Options.Enabled를 True로 설정하십시오. 이를 위해서는 SSLOptions에 이미 구성된 인증서와 키(CertFile/KeyFile, 개인 키가 암호화된 경우에는 Password까지)와 OpenSSL 3.5 이상이 필요합니다. SSLOptions.IOHandler는 iohOpenSSL 또는 iohNativeTLS여야 하며, 그 외의 값은 리스너가 시작할 때 오류를 발생시킵니다. iohNativeTLS를 사용하면 HTTP/3 리스너는 sgc QUIC 엔진에서 실행되고 TLS 1.3 핸드셰이크는 네이티브 TLS 엔진에서 처리되고 패킷 보호도 sgcCrypto에서 이루어지므로 OpenSSL이 필요하지 않습니다. OpenSSL 없이 실행하기를 참조하십시오. HTTP/3 리스너는 HTTPS 리스너와 똑같이 SSLOptions.Password를 읽으므로, 하나의 CertFile/KeyFile/Password 조합이 TCP/TLS 리스너와 HTTP/3 리스너 모두에 사용됩니다. Port는 리스너가 바인딩할 UDP 포트를 설정하며, SSLOptions.Port에 이미 설정된 포트를 재사용하려면 0으로 두십시오. Host는 리스너가 바인딩할 주소를 설정하며, 기본값인 빈 문자열로 두면 모든 인터페이스에 바인딩됩니다. IPv4 주소, IPv6 주소 또는 호스트 이름을 사용할 수 있습니다. HTTP/3 리스너는 자체 UDP 소켓 하나를 소유하며 Bindings를 읽지 않으므로, 이 속성으로는 리스너를 특정 인터페이스에 배치할 수 없습니다. HTTP/3을 통해 도착하는 요청은 HTTP/1.1 및 HTTP/2에 사용되는 것과 동일한 DocumentRoot 정적 파일 제공 및 동일한 OnCommandGet, OnCommandOther 이벤트를 통해 디스패치되므로 기존 요청 처리 코드가 대체로 그대로 작동합니다. 다만 코드에서 고려해야 할 두 가지 차이점이 있습니다: 이러한 요청에서 ARequestInfo.Version은 'HTTP/3'을 보고하며, 핸들러에 전달되는 AContext 매개변수는 nil입니다(HTTP/3 요청 뒤에는 TCP 연결이 없음). 따라서 이를 역참조하는 코드는 이 경우를 방어적으로 처리해야 합니다. AltSvc.Enabled(기본적으로 켜짐)를 사용하면 리스너가 실행되는 즉시 HTTPS 응답에 HTTP/3 엔드포인트를 알리는 Alt-Svc 헤더가 포함되어, 브라우저와 클라이언트가 이를 발견하고 자체적으로 전환할 수 있습니다. 이는 둘 다 활성화된 경우 HTTP/2 Alt-Svc 알림과 결합되어 하나의 헤더로 전달됩니다. HTTP/3 요청에는 Authentication.Basic이 적용됩니다. 세션, OAuth2, JWT 및 WebAuthn 인증과 요청 전달은 HTTP/3 요청에 존재하지 않는 TCP 연결 상태를 필요로 하므로 이 전송 방식에서는 평가할 수 없으며, 이러한 방식 중 하나로 구성된 서버는 HTTP/3 요청을 인증 없이 처리하는 대신 401로 거부합니다. HTTP/3 리스너가 인증된 요청을 처리해야 한다면 Basic 인증을 구성하십시오. HTTP/3 리스너 시작에 실패하면(포트 사용 중, 인증서 누락 또는 유효하지 않음, OpenSSL 3.5 미제공 등) 일반 HTTP/1.1 및 HTTP/2 서버는 영향을 받지 않고 계속 실행되며, 실패는 OnException을 통해 보고됩니다. HTTP/3 지원을 빌드하려면 HTTP3 pack 컴파일러 지시문을 활성화해야 합니다.

예제


oServer := TsgcHTTPServer.Create(nil);
oServer.SSL := true;
oServer.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oServer.HTTP3Options.Enabled := true;
oServer.Active := true;

속성으로 돌아가기