<!-- review: finished -->

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

# HTTP/3

Proporciona soporte para el protocolo [HTTP/3](https://datatracker.ietf.org/doc/html/rfc9114)
para conexiones de cliente,
así como para conexiones con servidores proxy
configurados usando las siguientes
directivas del módulo [Proxy](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#http-proxy):

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

Al [compilar desde el código fuente](https://es.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild),
este módulo no se compila por defecto;
debe habilitarse con la
[opción de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure)
`‑‑with‑http_v3_module`.

En paquetes e imágenes de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages),
el módulo está incluido en la compilación.

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

## Ejemplo de configuración

```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 una mejor compatibilidad se recomienda
        # usar el mismo puerto para http/3 y 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 la disponibilidad de HTTP/3
            add_header Alt-Svc 'h3=":8443"; ma=86400';
        }
    }
}
```

#### NOTE
Tenga en cuenta que aceptar conexiones HTTP/3 sobre TLS requiere soporte para el protocolo TLSv1.3, que está disponible desde la versión 1.1.1 de [OpenSSL](http://www.openssl.org/).

El soporte para 0-RTT requiere OpenSSL 3.5.1 o superior. Alternativamente, se puede usar [BoringSSL](https://boringssl.googlesource.com/boringssl/), [LibreSSL](https://www.libressl.org) o [QuicTLS](https://github.com/quictls/openssl) para compilar y ejecutar este módulo.

Antes de la versión 1.29.1, el soporte para 0-RTT no podía habilitarse con OpenSSL independientemente del valor de la directiva [ssl_early_data](https://es.angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-early-data).

Para solicitudes HTTP/3, si no se pasa la cabecera `Host`, la variable `$http_host` se inicializa desde la pseudo-cabecera `:authority`.

Además, la opción `reuseport` solo puede especificarse en una de las directivas `listen ... quic` en un servidor. Todas las demás directivas `listen ... quic` deben especificarse sin ella.

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

## Directivas

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

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

### http3

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|-------------------------|
| Predeterminado                                                                             | `http3 on;`             |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server            |

Habilita la negociación del protocolo HTTP/3.

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

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

### http3_hq

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_hq` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|----------------------------|
| Predeterminado                                                                             | `http3_hq off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server               |

Habilita la negociación del protocolo HTTP/0.9 utilizado en [pruebas de interoperabilidad QUIC](https://github.com/marten-seemann/quic-interop-runner).

#### WARNING
Habilite este modo solo para ejecutar pruebas especializadas que lo requieran explícitamente.

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

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

### http3_max_concurrent_streams

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_max_concurrent_streams` number;   |
|--------------------------------------------------------------------------------------------|------------------------------------------|
| Predeterminado                                                                             | `http3_max_concurrent_streams 128;`      |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                             |

Inicializa la configuración de HTTP/3 y QUIC
y establece el número máximo de flujos de solicitudes HTTP/3 concurrentes en una conexión.

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

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

### http3_max_table_capacity

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_max_table_capacity` number;   |
|--------------------------------------------------------------------------------------------|--------------------------------------|
| Predeterminado                                                                             | `http3_max_table_capacity 4096;`     |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                         |

Establece la capacidad de la [tabla dinámica](https://www.ietf.org/archive/id/draft-ietf-quic-qpack-20.html#name-dynamic-table)
para conexiones de servidor.

#### NOTE
Una directiva similar [proxy_http3_max_table_capacity](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-http3-max-table-capacity)
hace esto para conexiones proxy.
Para evitar errores,
el uso de tablas dinámicas está deshabilitado cuando el proxy con caché está habilitado.

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

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

### http3_stream_buffer_size

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `http3_stream_buffer_size` size;   |
|--------------------------------------------------------------------------------------------|------------------------------------|
| Predeterminado                                                                             | `http3_stream_buffer_size 64k;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                       |

Establece el [tamaño](https://es.angie.software//angie/docs/configuration/configfile.md#syntax) del búfer utilizado para leer y escribir en los flujos QUIC.

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

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

### quic_active_connection_id_limit

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_active_connection_id_limit` number;   |
|--------------------------------------------------------------------------------------------|---------------------------------------------|
| Predeterminado                                                                             | `quic_active_connection_id_limit 2;`        |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                                |

Establece el valor del parámetro de transporte QUIC active_connection_id_limit. Este es el número máximo de IDs de conexión que pueden almacenarse en el servidor.

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

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

### quic_bpf

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_bpf` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|----------------------------|
| Predeterminado                                                                             | `quic_bpf off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | main                       |

Habilita el enrutamiento de paquetes QUIC usando [eBPF](https://ebpf.io/). Cuando está habilitado, esto permite soportar la migración de conexiones QUIC.

#### NOTE
La directiva solo es compatible con Linux 5.7+.

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

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

### quic_gso

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_gso` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|----------------------------|
| Predeterminado                                                                             | `quic_gso off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server               |

Habilita el envío en modo por lotes optimizado mediante descarga de segmentación.

#### NOTE
El envío optimizado solo es compatible en Linux con soporte para `UDP_SEGMENT`.

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

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

### quic_host_key

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_host_key` file;   |
|--------------------------------------------------------------------------------------------|-------------------------|
| Predeterminado                                                                             | —                       |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server            |

Establece un file con la clave secreta utilizada para cifrar tokens de restablecimiento sin estado y validación de direcciones. Por defecto, se genera una clave aleatoria en cada recarga. Los tokens generados con claves antiguas no son aceptados.

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

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

### quic_retry

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `quic_retry` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|------------------------------|
| Predeterminado                                                                             | `quic_retry off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                 |

Habilita la función de [validación de direcciones QUIC](https://datatracker.ietf.org/doc/html/rfc9000#name-address-validation). Esto incluye enviar un nuevo token en un paquete Retry o un marco NEW_TOKEN y validar un token recibido en el paquete Initial.

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

## Variables integradas

El módulo http_v3 admite las siguientes variables integradas:

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

### `$http3`

identificador de protocolo negociado:

| `h3`   | para conexiones HTTP/3          |
|--------|---------------------------------|
| `hq`   | para conexiones hq              |
| `""`   | una cadena vacía en otros casos |

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

### `$quic_connection`

número de serie de la conexión QUIC
