TsgcWebSocketHTTPServer › Eigenschaften › HTTP3Options
Aktiviert den HTTP/3-Listener (QUIC), der HTTP-Anfragen neben HTTP/1.1 und HTTP/2 über UDP bedient.
property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;
Enabled=False, Port=0, Host='', AltSvc.Enabled=True
Standardmäßig lauscht der Server nicht auf HTTP/3. Setzen Sie HTTP3Options.Enabled auf True, um zusätzlich zum bestehenden TCP/TLS-Listener einen QUIC-Listener zu öffnen; dafür sind das bereits in SSLOptions konfigurierte Zertifikat und der Schlüssel erforderlich (CertFile/KeyFile sowie Password, wenn der private Schlüssel verschlüsselt ist) sowie OpenSSL 3.5 oder neuer. Der HTTP/3-Listener liest SSLOptions.Password genau so wie der HTTPS-Listener, sodass ein einziger Satz aus CertFile/KeyFile/Password sowohl den TCP/TLS-Listener als auch den HTTP/3-Listener bedient. Port legt den UDP-Port fest, an den der Listener bindet; belassen Sie ihn bei 0, um den bereits in SSLOptions.Port gesetzten Port wiederzuverwenden. Host legt die Adresse fest, an die der Listener bindet; lassen Sie sie leer, der Standardwert, um jede Schnittstelle zu binden. Sie akzeptiert eine IPv4-Adresse, eine IPv6-Adresse oder einen Hostnamen. Der HTTP/3-Listener besitzt einen eigenen einzelnen UDP-Socket und liest Bindings nicht, diese Eigenschaft kann daher nicht verwendet werden, um den Listener auf eine Schnittstelle zu legen. Über HTTP/3 eintreffende Anfragen werden über dieselbe DocumentRoot-Auslieferung statischer Dateien sowie dieselben Ereignisse OnCommandGet und OnCommandOther weitergeleitet, die auch für HTTP/1.1 und HTTP/2 verwendet werden, sodass bestehender Code zur Anfrageverarbeitung meist unverändert funktioniert; zwei Unterschiede sind zu beachten: ARequestInfo.Version meldet für diese Anfragen 'HTTP/3', und der an den Handler übergebene Parameter AContext ist nil (hinter einer HTTP/3-Anfrage steht keine TCP-Verbindung), sodass jeder Code, der ihn dereferenziert, diesen Fall abfangen muss. AltSvc.Enabled (standardmäßig aktiviert) sorgt dafür, dass HTTPS-Antworten einen Alt-Svc-Header mit einer Ankündigung des HTTP/3-Endpunkts tragen, sobald der Listener läuft, sodass Browser und Clients ihn erkennen und selbstständig darauf umschalten können; wenn beide aktiviert sind, wird dies mit der HTTP/2-Alt-Svc-Ankündigung zu einem einzigen Header zusammengeführt. Authentication.Basic wird bei HTTP/3-Anfragen durchgesetzt; Sitzungen, OAuth2- und JWT-Authentifizierung sowie Anfrageweiterleitung werden in dieser Version nicht darauf angewendet. Falls der HTTP/3-Listener nicht starten kann (Port bereits belegt, Zertifikat fehlt oder ist ungültig, OpenSSL 3.5 nicht verfügbar), läuft der reguläre HTTP/1.1- und HTTP/2-Server unbeeinträchtigt weiter, und der Fehler wird über OnException gemeldet. Für die Kompilierung mit HTTP/3-Unterstützung muss die Compiler-Direktive für das HTTP3-Pack aktiviert sein.
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;