TsgcWebSocketHTTPServer › Propriedades › HTTP3Options
Habilita o listener HTTP/3 (QUIC) que serve requisições HTTP juntamente com HTTP/1.1 e HTTP/2, por UDP.
property HTTP3Options: TsgcWSHTTP3Server_Options read FHTTP3Options write SetHTTP3Options;
Enabled=False, Port=0, Host='', AltSvc.Enabled=True
Por padrão, o servidor não escuta por HTTP/3. Defina HTTP3Options.Enabled como True para abrir um listener QUIC ao lado do listener TCP/TLS existente; isso requer o certificado e a chave já configurados em SSLOptions (CertFile/KeyFile, mais Password quando a chave privada está criptografada) e OpenSSL 3.5 ou posterior. SSLOptions.IOHandler deve ser iohOpenSSL ou iohNativeTLS, qualquer outro valor gera um erro quando o listener inicia. Com iohNativeTLS o listener HTTP/3 roda sobre o mecanismo QUIC sgc com o handshake TLS 1.3 sobre o mecanismo TLS nativo e a proteção de pacotes sobre o sgcCrypto, portanto ele não precisa de OpenSSL, veja Executar sem OpenSSL. O listener HTTP/3 lê SSLOptions.Password exatamente como o listener HTTPS, portanto um único conjunto CertFile/KeyFile/Password atende tanto ao listener TCP/TLS quanto ao listener HTTP/3. Port define a porta UDP à qual o listener se vincula; deixe-a em 0 para reutilizar a porta já definida em SSLOptions.Port. Host define o endereço ao qual o listener se vincula; deixe-o vazio, que é o padrão, para vincular todas as interfaces. Ele aceita um endereço IPv4, um endereço IPv6 ou um nome de host. O listener HTTP/3 possui um único socket UDP próprio e não lê Bindings, portanto essa propriedade não pode ser usada para colocar o listener em uma única interface. Requisições recebidas via HTTP/3 são despachadas pelo mesmo DocumentRoot de fornecimento de arquivos estáticos e pelos mesmos eventos OnCommandGet e OnCommandOther usados para HTTP/1.1 e HTTP/2, de modo que o código de tratamento de requisições existente praticamente já funciona; há duas diferenças a considerar no código: ARequestInfo.Version reporta 'HTTP/3' para essas requisições, e o parâmetro AContext passado ao handler é nil (não há conexão TCP por trás de uma requisição HTTP/3), portanto qualquer código que o desreferencie deve se proteger contra esse caso. AltSvc.Enabled (ativado por padrão) faz com que as respostas HTTPS carreguem um cabeçalho Alt-Svc anunciando o endpoint HTTP/3 assim que o listener estiver em execução, para que navegadores e clientes possam descobri-lo e migrar por conta própria; ele se combina com o anúncio Alt-Svc do HTTP/2 em um único cabeçalho quando ambos estão habilitados. Authentication.Basic é aplicada às requisições HTTP/3; sessões, autenticação OAuth2 e JWT e o encaminhamento de requisições não são aplicados a elas nesta versão. Se o listener HTTP/3 falhar ao iniciar — porta em uso, certificado ausente ou inválido, OpenSSL 3.5 não disponível — o servidor HTTP/1.1 e HTTP/2 normal continua em execução sem ser afetado, e a falha é reportada por meio de OnException. Compilar com suporte a HTTP/3 requer que a diretiva de compilador do pacote HTTP3 esteja habilitada.
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;