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, 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, ein verschlüsselter privater Schlüssel wird für diesen Listener nicht unterstützt) sowie OpenSSL 3.5 oder neuer. 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. Ü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;