TsgcWebSocketHTTPServer › Eigenschaften › HTTP3Options

HTTP3Options Eigenschaft

Aktiviert den HTTP/3-Listener (QUIC), der HTTP-Anfragen neben HTTP/1.1 und HTTP/2 über UDP bedient.

Syntax

property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;

Standardwert

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

Hinweise

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. SSLOptions.IOHandler muss iohOpenSSL oder iohNativeTLS sein, jeder andere Wert löst beim Start des Listeners einen Fehler aus. Mit iohNativeTLS läuft der HTTP/3-Listener auf der sgc-QUIC-Engine mit dem TLS-1.3-Handshake auf der nativen TLS-Engine und dem Paketschutz auf sgcCrypto, sodass kein OpenSSL erforderlich ist, siehe SSL ohne OpenSSL. 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.

Beispiel


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;

Zurück zu Properties