TsgcWebSocketHTTPServer › 属性 › HTTP3Options
启用 HTTP/3(QUIC)监听器,使其与 HTTP/1.1 和 HTTP/2 并行通过 UDP 处理 HTTP 请求。
property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;
Enabled=False, Port=0, AltSvc.Enabled=True
默认情况下,服务器不会监听 HTTP/3。将 HTTP3Options.Enabled 设置为 True,即可在现有 TCP/TLS 监听器之外再打开一个 QUIC 监听器;这需要 SSLOptions 中已配置的证书和密钥(CertFile/KeyFile,该监听器不支持加密的私钥)以及 OpenSSL 3.5 或更高版本。Port 用于设置该监听器绑定的 UDP 端口,保留为 0 可复用 SSLOptions.Port 中已设置的端口。通过 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 和 HTTP/3 均启用时,它会与 HTTP/2 的 Alt-Svc 通告合并为单个标头。Authentication.Basic 会在 HTTP/3 请求上强制执行;在此版本中,会话、OAuth2 和 JWT 身份验证以及请求转发尚不适用于这些请求。如果 HTTP/3 监听器启动失败,例如端口被占用、证书缺失或无效、OpenSSL 3.5 不可用,常规的 HTTP/1.1 和 HTTP/2 服务器不受影响并继续运行,故障会通过 OnException 报告。构建具有 HTTP/3 支持的应用需要启用 HTTP3 pack 编译器指令。
oServer := TsgcWebSocketHTTPServer.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;