<!-- review: finished -->

<a id="http-v3"></a>

# HTTP/3

Fornece suporte ao protocolo [HTTP/3](https://datatracker.ietf.org/doc/html/rfc9114)
para conexões de cliente,
bem como para conexões com servidores proxy
configurados usando as seguintes
diretivas do módulo [Proxy](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#http-proxy):

- [proxy_http3_hq](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http3-hq)
- [proxy_http3_max_concurrent_streams](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http3-max-concurrent-streams)
- [proxy_http3_max_table_capacity](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http3-max-table-capacity)
- [proxy_http3_stream_buffer_size](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http3-stream-buffer-size)
- [proxy_http_version](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http-version)
- [proxy_pass](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-pass)
- [proxy_quic_active_connection_id_limit](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-quic-active-connection-id-limit)
- [proxy_quic_gso](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-quic-gso)
- [proxy_quic_host_key](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-quic-host-key)

Ao [compilar a partir do código-fonte](https://pt.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild),
este módulo não é compilado por padrão;
ele deve ser habilitado com a
[opção de compilação](https://pt.angie.software//angie/docs/installation/sourcebuild.md#configure) `‑‑with‑http_v3_module`.

Em pacotes e imagens de [nossos repositórios](https://pt.angie.software//angie/docs/installation/index.md#install-packages),
o módulo está incluído na compilação.

<a id="configuration-example-50"></a>

## Exemplo de Configuração

```nginx
http {
    log_format quic '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" "$http3"';

    access_log logs/access.log quic;

    server {
        # para melhor compatibilidade é recomendado
        # usar a mesma porta para http/3 e https
        listen 8443 quic reuseport;
        listen 8443 ssl;

        ssl_certificate     certs/example.com.crt;
        ssl_certificate_key certs/example.com.key;

        location / {
            # usado para anunciar a disponibilidade do HTTP/3
            add_header Alt-Svc 'h3=":8443"; ma=86400';
        }
    }
}
```

#### NOTE
Note que aceitar conexões HTTP/3 sobre TLS requer suporte ao protocolo TLSv1.3, que está disponível desde a versão 1.1.1 do [OpenSSL](http://www.openssl.org/).

O suporte a 0-RTT requer OpenSSL 3.5.1 ou superior. Alternativamente, [BoringSSL](https://boringssl.googlesource.com/boringssl/), [LibreSSL](https://www.libressl.org), ou [QuicTLS](https://github.com/quictls/openssl) podem ser usados para compilar e executar este módulo.

Antes da versão 1.29.1, o suporte a 0-RTT não podia ser habilitado com OpenSSL independentemente do valor da diretiva [ssl_early_data](https://pt.angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-early-data).

Para requisições HTTP/3, se o cabeçalho `Host` não for passado, a variável `$http_host` é inicializada a partir do pseudo-cabeçalho `:authority`.

Além disso, a opção `reuseport` só pode ser especificada em uma das diretivas `listen ... quic` em um servidor. Todas as outras diretivas `listen ... quic` devem ser especificadas sem ela.

<a id="directives-53"></a>

## Diretivas

<a id="index-0"></a>

<a id="http3"></a>

### http3

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|-------------------------|
| Padrão                                                                                    | `http3 on;`             |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server            |

Habilita a negociação do protocolo HTTP/3.

<a id="index-1"></a>

<a id="http3-hq"></a>

### http3_hq

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_hq` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|----------------------------|
| Padrão                                                                                    | `http3_hq off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server               |

Habilita a negociação do protocolo HTTP/0.9 usado em [testes de interoperabilidade QUIC](https://github.com/marten-seemann/quic-interop-runner).

#### WARNING
Habilite este modo apenas para executar testes especializados que o exijam explicitamente.

<a id="index-2"></a>

<a id="http3-max-concurrent-streams"></a>

### http3_max_concurrent_streams

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_max_concurrent_streams` number;   |
|-------------------------------------------------------------------------------------------|------------------------------------------|
| Padrão                                                                                    | `http3_max_concurrent_streams 128;`      |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server                             |

Inicializa as configurações HTTP/3 e QUIC
e define o número máximo de fluxos de requisição HTTP/3 simultâneos em uma conexão.

<a id="index-3"></a>

<a id="http3-max-table-capacity"></a>

### http3_max_table_capacity

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_max_table_capacity` number;   |
|-------------------------------------------------------------------------------------------|--------------------------------------|
| Padrão                                                                                    | `http3_max_table_capacity 4096;`     |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server                         |

Define a capacidade da [tabela dinâmica](https://www.ietf.org/archive/id/draft-ietf-quic-qpack-20.html#name-dynamic-table)
para conexões de servidor.

#### NOTE
Uma diretiva similar [proxy_http3_max_table_capacity](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http3-max-table-capacity)
faz isso para conexões proxy.
Para evitar erros,
o uso da tabela dinâmica é desabilitado quando o proxy com cache está habilitado.

<a id="index-4"></a>

<a id="http3-stream-buffer-size"></a>

### http3_stream_buffer_size

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_stream_buffer_size` size;   |
|-------------------------------------------------------------------------------------------|------------------------------------|
| Padrão                                                                                    | `http3_stream_buffer_size 64k;`    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server                       |

Define o [tamanho](https://pt.angie.software//angie/docs/configuration/configfile.md#syntax) do buffer usado para leitura e escrita dos fluxos QUIC.

<a id="index-5"></a>

<a id="quic-active-connection-id-limit"></a>

### quic_active_connection_id_limit

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_active_connection_id_limit` number;   |
|-------------------------------------------------------------------------------------------|---------------------------------------------|
| Padrão                                                                                    | `quic_active_connection_id_limit 2;`        |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server                                |

Define o valor do parâmetro de transporte QUIC active_connection_id_limit. Este é o número máximo de IDs de conexão que podem ser armazenados no servidor.

<a id="index-6"></a>

<a id="quic-bpf"></a>

### quic_bpf

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_bpf` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|----------------------------|
| Padrão                                                                                    | `quic_bpf off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | main                       |

Habilita o roteamento de pacotes QUIC usando [eBPF](https://ebpf.io/). Quando habilitado, isso permite suportar migração de conexão QUIC.

#### NOTE
A diretiva é suportada apenas no Linux 5.7+.

<a id="index-7"></a>

<a id="quic-gso"></a>

### quic_gso

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_gso` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|----------------------------|
| Padrão                                                                                    | `quic_gso off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server               |

Habilita o envio em modo de lote otimizado usando offloading de segmentação.

#### NOTE
O envio otimizado é suportado apenas no Linux com `UDP_SEGMENT`.

<a id="index-8"></a>

<a id="quic-host-key"></a>

### quic_host_key

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_host_key` file;   |
|-------------------------------------------------------------------------------------------|-------------------------|
| Padrão                                                                                    | —                       |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server            |

Define um file com a chave secreta usada para criptografar tokens de reset sem estado e validação de endereço. Por padrão, uma chave aleatória é gerada a cada recarga. Tokens gerados com chaves antigas não são aceitos.

<a id="index-9"></a>

<a id="quic-retry"></a>

### quic_retry

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_retry` `on` | `off`;   |
|-------------------------------------------------------------------------------------------|------------------------------|
| Padrão                                                                                    | `quic_retry off;`            |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server                 |

Habilita o recurso de [Validação de Endereço QUIC](https://datatracker.ietf.org/doc/html/rfc9000#name-address-validation). Isso inclui enviar um novo token em um pacote Retry ou um frame NEW_TOKEN e validar um token recebido no pacote Initial.

<a id="built-in-variables-18"></a>

## Variáveis Integradas

O módulo http_v3 suporta as seguintes variáveis integradas:

<a id="v-http3"></a>

### `$http3`

identificador do protocolo negociado:

| `h3`   | para conexões HTTP/3            |
|--------|---------------------------------|
| `hq`   | para conexões hq                |
| `""`   | uma string vazia caso contrário |

<a id="v-quic-connection"></a>

### `$quic_connection`

número serial da conexão QUIC
