TsgcHTTPServer › Eigenschappen › HTTP3Options

HTTP3Options Eigenschap

Schakelt de HTTP/3-listener (QUIC) in die HTTP-verzoeken over UDP verwerkt naast HTTP/1.1 en HTTP/2.

Syntaxis

property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;

Standaardwaarde

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

Opmerkingen

Standaard luistert de server niet naar HTTP/3. Stel HTTP3Options.Enabled in op True om naast de bestaande TCP/TLS-listener een QUIC-listener te openen; dit vereist het certificaat en de sleutel die al zijn geconfigureerd in SSLOptions (CertFile/KeyFile, plus Password wanneer de private key versleuteld is) en OpenSSL 3.5 of hoger. SSLOptions.IOHandler moet iohOpenSSL of iohNativeTLS zijn, elke andere waarde geeft een fout wanneer de listener start. Met iohNativeTLS draait de HTTP/3-listener op de sgc QUIC-engine met de TLS 1.3-handshake op de native TLS-engine en de pakketbescherming op sgcCrypto, dus is geen OpenSSL nodig, zie SSL zonder OpenSSL. De HTTP/3-listener leest SSLOptions.Password precies zoals de HTTPS-listener dat doet, zodat één set CertFile/KeyFile/Password zowel de TCP/TLS-listener als de HTTP/3-listener bedient. Port stelt de UDP-poort in waaraan de listener wordt gebonden; laat deze op 0 staan om de poort te hergebruiken die al is ingesteld in SSLOptions.Port. Host stelt het adres in waaraan de listener wordt gebonden; laat dit leeg, de standaardwaarde, om aan alle interfaces te binden. Het accepteert een IPv4-adres, een IPv6-adres of een hostnaam. De HTTP/3-listener heeft één eigen UDP-socket en leest Bindings niet, dus die eigenschap kan niet worden gebruikt om de listener op één interface te plaatsen. Verzoeken die via HTTP/3 binnenkomen, worden afgehandeld via dezelfde DocumentRoot-bestandsserving en dezelfde OnCommandGet- en OnCommandOther-events die worden gebruikt voor HTTP/1.1 en HTTP/2, zodat bestaande code voor het verwerken van verzoeken meestal gewoon werkt; er zijn twee verschillen om rekening mee te houden: ARequestInfo.Version geeft voor deze verzoeken 'HTTP/3' terug, en de parameter AContext die aan de handler wordt doorgegeven is nil (er is geen TCP-verbinding achter een HTTP/3-verzoek), dus code die deze dereferentieert moet hiermee rekening houden. AltSvc.Enabled (standaard ingeschakeld) zorgt ervoor dat HTTPS-antwoorden een Alt-Svc-header bevatten die het HTTP/3-eindpunt adverteert zodra de listener actief is, zodat browsers en clients dit zelf kunnen ontdekken en overschakelen; deze wordt gecombineerd met de HTTP/2 Alt-Svc-advertentie tot een enkele header wanneer beide zijn ingeschakeld. Authentication.Basic wordt afgedwongen op HTTP/3-verzoeken. Sessies, OAuth2-, JWT- en WebAuthn-authenticatie en het doorsturen van verzoeken hebben TCP-verbindingsstatus nodig die een HTTP/3-verzoek niet heeft, zodat ze op dit transport niet kunnen worden geëvalueerd, en een server die met een van deze schema's is geconfigureerd, weigert HTTP/3-verzoeken met 401 in plaats van ze zonder authenticatie te bedienen. Configureer Basic-authenticatie als de HTTP/3-listener geverifieerde verzoeken moet bedienen. Als de HTTP/3-listener niet kan starten (poort in gebruik, ontbrekend of ongeldig certificaat, OpenSSL 3.5 niet beschikbaar), blijft de reguliere HTTP/1.1- en HTTP/2-server zonder gevolgen doorlopen en wordt de fout gerapporteerd via OnException. Bouwen met ondersteuning voor HTTP/3 vereist dat de compilerdirectief HTTP3 pack is ingeschakeld.

Voorbeeld


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;

Terug naar Properties