# Reto de navegador

> La página de prueba de trabajo que el borde enseña en lugar de bloquear cuando una regla reta; los navegadores reales la resuelven solos.

Algunas reglas pueden **retar** una petición en lugar de bloquearla: las [reglas de límite de peticiones](https://developers.openwaf.dev/es/waf/rate-limiting/#per-path-rules) con `action: challenge` y la [política del control de rastreadores IA](https://developers.openwaf.dev/es/ai-crawl-control/policy/) con la acción `challenge`.

## Qué ve el visitante

Una navegación de navegador (un `GET` cuyo `Accept` incluye `text/html`) recibe una página intermedia breve:

1. La página responde `503` con `Cache-Control: no-store`, así que nunca se guarda en caché ni se indexa.
2. Un pequeño script, sin recursos externos, calcula una prueba de trabajo SHA-256 en el navegador (normalmente entre decenas y cientos de milisegundos).
3. Envía el resultado a `/__waf/verify`. Si es válido, el borde pone la cookie `__waf_pass` (`HttpOnly`, `Secure`, `SameSite=Lax`) y la página se recarga.
4. Mientras el pase sea válido, la misma regla deja pasar al visitante.

El pase lo firma el borde y va ligado a la red del visitante; cuando caduca, o desde otra red, puede tener que resolver el reto otra vez.

## Peticiones que no son navegaciones

Los scripts, las llamadas a la API y los envíos de formularios no pueden ejecutar la página intermedia, así que no la reciben:

| Origen del reto | Respuesta a lo que no es navegación |
|---|---|
| Regla de límite de peticiones | `429` con `Retry-After`, exactamente como `block`. |
| Control de rastreadores IA | `403` con `{"error":"verificacion de navegador requerida"}`. |

## Rastreadores

Un User-Agent por sí solo no demuestra nada. Con el control de rastreadores IA activado y `spoofed_challenge` en `enforce`, solo los rastreadores **verificados** por rango de IP, DNS inverso o Web Bot Auth se saltan el reto. Consulta [Verificación de bots](https://developers.openwaf.dev/es/ai-crawl-control/verification/).
