TsgcHTTPServer › Propriétés › HTTP3Options

HTTP3Options Propriété

Active l'écouteur HTTP/3 (QUIC) qui traite les requêtes HTTP en plus de HTTP/1.1 et HTTP/2, sur UDP.

Syntaxe

property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;

Valeur par défaut

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

Remarques

Par défaut, le serveur n'écoute pas les requêtes HTTP/3. Définissez HTTP3Options.Enabled à True pour ouvrir un écouteur QUIC en plus de l'écouteur TCP/TLS existant ; cela nécessite le certificat et la clé déjà configurés dans SSLOptions (CertFile/KeyFile, plus Password lorsque la clé privée est chiffrée) ainsi qu'OpenSSL 3.5 ou une version ultérieure. SSLOptions.IOHandler doit valoir iohOpenSSL ou iohNativeTLS, toute autre valeur provoque une erreur au démarrage de l'écouteur. Avec iohNativeTLS, l'écouteur HTTP/3 fonctionne sur le moteur QUIC sgc avec la poignée de main TLS 1.3 sur le moteur TLS natif et la protection des paquets sur sgcCrypto, il n'a donc besoin d'aucun OpenSSL, voir Fonctionner sans OpenSSL. L'écouteur HTTP/3 lit SSLOptions.Password exactement comme le fait l'écouteur HTTPS, un même ensemble CertFile/KeyFile/Password sert donc à la fois l'écouteur TCP/TLS et l'écouteur HTTP/3. Port définit le port UDP sur lequel l'écouteur se lie ; laissez-le à 0 pour réutiliser le port déjà défini dans SSLOptions.Port. Host définit l'adresse à laquelle l'écouteur se lie ; laissez-le vide, la valeur par défaut, pour se lier à toutes les interfaces. Il accepte une adresse IPv4, une adresse IPv6 ou un nom d'hôte. L'écouteur HTTP/3 possède son propre socket UDP unique et ne lit pas Bindings, cette propriété ne peut donc pas servir à placer l'écouteur sur une interface donnée. Les requêtes reçues via HTTP/3 sont acheminées via le même mécanisme de service de fichiers statiques DocumentRoot et les mêmes événements OnCommandGet et OnCommandOther utilisés pour HTTP/1.1 et HTTP/2, de sorte que le code de traitement des requêtes existant fonctionne pour l'essentiel sans modification ; deux différences à prendre en compte dans le code : ARequestInfo.Version indique 'HTTP/3' pour ces requêtes, et le paramètre AContext transmis au gestionnaire vaut nil (il n'y a pas de connexion TCP derrière une requête HTTP/3), donc tout code qui le déréférence doit se prémunir contre ce cas. AltSvc.Enabled (activé par défaut) fait en sorte que les réponses HTTPS portent un en-tête Alt-Svc annonçant le point de terminaison HTTP/3 une fois l'écouteur démarré, afin que les navigateurs et les clients puissent le découvrir et basculer d'eux-mêmes ; il se combine avec l'annonce Alt-Svc de HTTP/2 en un seul en-tête lorsque les deux sont activés. Authentication.Basic est appliquée aux requêtes HTTP/3. Les sessions, l'authentification OAuth2, JWT et WebAuthn ainsi que le transfert de requêtes nécessitent un état de connexion TCP dont une requête HTTP/3 ne dispose pas, ils ne peuvent donc pas être évalués sur ce transport, et un serveur configuré avec l'un de ces schémas refuse les requêtes HTTP/3 avec un 401 au lieu de les servir sans authentification. Configurez l'authentification Basic si l'écouteur HTTP/3 doit servir des requêtes authentifiées. Si l'écouteur HTTP/3 ne parvient pas à démarrer — port déjà utilisé, certificat manquant ou invalide, OpenSSL 3.5 non disponible — le serveur HTTP/1.1 et HTTP/2 habituel continue de fonctionner normalement et l'échec est signalé via OnException. La compilation avec la prise en charge de HTTP/3 nécessite d'activer la directive de compilation du pack HTTP3.

Exemple


oServer := TsgcHTTPServer.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;

Retour aux propriétés