TsgcWebSocketHTTPServer属性 › HTTP3Options

HTTP3Options 属性

启用 HTTP/3(QUIC)监听器,使其与 HTTP/1.1 和 HTTP/2 并行通过 UDP 处理 HTTP 请求。

语法

property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;

默认值

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

备注

默认情况下,服务器不会监听 HTTP/3。将 HTTP3Options.Enabled 设置为 True,即可在现有 TCP/TLS 监听器之外再打开一个 QUIC 监听器;这需要 SSLOptions 中已配置的证书和密钥(CertFile/KeyFile,私钥加密时还需 Password)以及 OpenSSL 3.5 或更高版本。HTTP/3 监听器读取 SSLOptions.Password 的方式与 HTTPS 监听器完全相同,因此一组 CertFile/KeyFile/Password 即可同时服务于 TCP/TLS 监听器和 HTTP/3 监听器。Port 用于设置该监听器绑定的 UDP 端口,保留为 0 可复用 SSLOptions.Port 中已设置的端口。Host 用于设置该监听器绑定的地址,保留为空(默认值)即绑定所有接口;它接受 IPv4 地址、IPv6 地址或主机名。HTTP/3 监听器拥有自己独立的 UDP 套接字,不会读取 Bindings,因此无法通过该属性把监听器限定到某个接口。通过 HTTP/3 到达的请求会经由与 HTTP/1.1 和 HTTP/2 相同的 DocumentRoot 静态文件服务,以及相同的 OnCommandGetOnCommandOther 事件进行分发,因此现有的请求处理代码大多无需修改即可正常工作;需要注意两个差异: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;

返回属性