Haces clic en un enlace y te sale una página casi vacía: "403 Forbidden" en letras grandes y la palabra "nginx" debajo. Otro sitio expresa el mismo rechazo como "You don't have permission to access this resource". Y a veces Chrome muestra una página gris propia que dice que se ha denegado el acceso al sitio, con HTTP ERROR 403 al final.
Todos son el mismo código de estado HTTP: el servidor recibió tu solicitud, la entendió y decidió no atenderla. A continuación verás en qué se diferencia el 403 del 401 y del 404, cómo saber quién te ha rechazado, qué puedes probar como visitante, cómo encuentra el propietario de un sitio la regla en los registros y cómo leer un 403 en tu propio código o a través de un proxy.
¿Qué significa 403 Forbidden?
Toda respuesta de un servidor web empieza con un código de estado de tres cifras. Los códigos del grupo 400 dicen que el problema está en la solicitud, y el 403 es el que significa "sé lo que quieres y la respuesta es no". El estándar HTTP, RFC 9110, lo define como la respuesta de un servidor que entendió la solicitud pero se niega a atenderla. Puede explicar el motivo en la página que envía, pero no está obligado a hacerlo.
El estándar añade dos detalles. Si habías iniciado sesión, un 403 significa que tu cuenta no basta para esta página, y repetir la solicitud no cambiará eso. Y un servidor que quiera ocultar que una página existe puede responder 404 Not Found en su lugar.
¿Cuál es la diferencia entre 401, 403 y 404?
| Código | Nombre | Qué dice el servidor | Qué suele ayudar |
|---|---|---|---|
401 | Unauthorized | "No sé quién eres" | Iniciar sesión o enviar credenciales válidas |
403 | Forbidden | "Lo sé, y la respuesta es no" | Otra cuenta, otra red o el permiso del sitio |
404 | Not Found | "Aquí no hay nada" o "no te lo voy a decir" | Revisar la dirección |
Un 401 tiene que llevar una cabecera que indique al navegador cómo iniciar sesión. Un 403 no trae esa pista, así que volver a iniciar sesión solo ayuda cuando el 403 se debe a una sesión perdida. El 407 es la versión del 401 para proxies: quien pide usuario y contraseña es tu proxy, no el sitio.
¿Cómo se produce un 403, paso a paso?
Una solicitud atraviesa varios puntos de control, y cualquiera de ellos puede rechazarla:
- La puerta de entrada. Una CDN (una red de servidores que responde por el sitio desde muchas ubicaciones) o un firewall revisa tu dirección IP, tu país, el ritmo de tus solicitudes y la propia solicitud.
- Las reglas del servidor web. nginx, Apache o un balanceador de carga aplica sus listas de direcciones permitidas y denegadas y las reglas de
.htaccess. - Los archivos. El servidor necesita permiso para leer el archivo; una carpeta sin archivo índice (la página que se muestra por defecto) se rechaza en lugar de listarse.
- La aplicación. El código del sitio comprueba si has iniciado sesión y si puedes ver la página.
- El rechazo. El primer punto de control que dice no responde con 403. Quién dijo que no determina quién puede arreglarlo.
¿Cómo es la página 403 y quién la envió?
El aspecto de la página te dice qué punto de control te rechazó.
| Lo que ves | Quién la envía | Causa habitual |
|---|---|---|
| "403 Forbidden", con "nginx" debajo | nginx, el servidor web del sitio | Permisos de archivo, falta de archivo índice o una regla de acceso |
| "403 Forbidden", con "openresty" debajo | OpenResty, una variante de nginx | Lo mismo que en nginx |
| "Forbidden", "You don't have permission to access this resource." | Apache | Permisos de archivo, una regla de .htaccess o una carpeta sin archivo índice |
| "403 Forbidden", "Request forbidden by administrative rules." | HAProxy, un balanceador de carga | Una regla de acceso en el balanceador de carga |
| "403 Forbidden", "Microsoft-Azure-Application-Gateway/v2" | El firewall de Azure Application Gateway | Una regla de seguridad coincidió con tu solicitud |
| "Sorry, you have been blocked", un Ray ID | Cloudflare | Una regla de seguridad que configuró el sitio |
| "Se ha denegado el acceso a …", "No tienes autorización para ver esta página.", "HTTP ERROR 403" | Chrome o Edge | El sitio envió un 403 sin página propia |
En la última fila habla el navegador: cuando llega un 403 sin página propia, Chrome y Edge llenan la pantalla con su propio texto (aquí, el de Chrome en español), que no dice nada sobre la causa. Para la página de Cloudflare, Sorry, you have been blocked explica el Ray ID y qué enviar al sitio.
¿Por qué me sale un error 403?
Desde el lado del visitante, estos son los motivos habituales:
- La dirección apunta a una carpeta o a un archivo privado, como una carpeta sin archivo índice o un archivo de copia de seguridad.
- No has iniciado sesión o tu sesión terminó. Una cookie, el pequeño archivo que un sitio guarda en tu navegador para recordarte, puede haber caducado o estar dañada.
- Tu cuenta no tiene permiso, por ejemplo para un documento compartido o una página de administración.
- Tu dirección IP o tu país no están permitidos. Algunos sitios de administraciones públicas, bancos y empresas solo aceptan visitantes de ciertos países o redes, y algunos bloquean rangos de direcciones después de un abuso.
- La dirección de tu VPN tiene mala reputación. Mucha gente comparte una misma dirección de VPN; si algunos se portaron mal, los sistemas de seguridad pueden rechazar a todos los que salen por ella.
- Un filtro de seguridad saltó con la solicitud. Un firewall de aplicaciones web (WAF) compara cada solicitud con reglas escritas para frenar ataques, y un término de búsqueda con caracteres como
',--o<script>puede parecer uno. ¿Qué es un WAF? explica cómo deciden estos filtros. - Una extensión modificó la solicitud, por ejemplo reescribiendo cabeceras o bloqueando scripts.
- Enviaste demasiadas solicitudes. Algunos sitios responden a una ráfaga con 403 en lugar del habitual 429 Too Many Requests.
Cómo resolver el error 403 si eres visitante
Sigue estos pasos en orden; los primeros llevan segundos.
- Revisa la dirección. Busca una errata y luego llega a la página desde el menú del propio sitio.
- Recarga una vez. Pulsa F5 o el botón Volver a cargar de la página de error de Chrome. Los navegadores no guardan un 403 para reutilizarlo salvo que el sitio lo indique, así que recargar vuelve a preguntar de verdad. Si no cambia nada, detente: decenas de recargas pueden activar una regla de límite de solicitudes.
- Vuelve a iniciar sesión. Cierra sesión, vuelve a entrar y abre la página desde la página principal del sitio.
- Borra las cookies de ese sitio. En Chrome: Más > Configuración > Privacidad y seguridad > Cookies de terceros > Ver todos los datos y permisos de sitios, busca el sitio y selecciona Eliminar (los pasos de Google). Así solo cierras sesión en ese sitio.
- Prueba una ventana de incógnito. En Chrome, Más > Nueva ventana de Incógnito (Ctrl + Mayús + N). Se abre sin las cookies del sitio, y las extensiones siguen desactivadas salvo que las hayas permitido ahí. Si la página se abre, la causa era una cookie o una extensión; desactiva las extensiones una a una en Más > Extensiones > Gestionar extensiones.
- Desactiva la VPN o el proxy, o cambia de red. Desconecta la VPN y recarga, o prueba con el teléfono usando datos móviles. Si así funciona, el sitio rechaza las direcciones de esa VPN.
- Contacta con el sitio. Envía la dirección exacta, la hora, lo que estabas haciendo y cualquier referencia de la página, como un Ray ID o un ID de incidente.
No hay ningún truco honrado para un 403 que un sitio pone a propósito. Si un servicio solo acepta visitantes de su propio país, la forma de entrar es la que él ofrece: una cuenta, una aplicación oficial o su equipo de soporte.
Si es tu sitio: ¿cómo encuentras la causa?
Empieza por averiguar quién respondió. Las notas de Cloudflare sobre el error 403 lo dicen claramente: un 403 sin la marca de Cloudflare procede de tu propio servidor, normalmente de reglas de permisos, de un módulo de firewall como mod_security o de reglas que deniegan IP; uno con la marca de Cloudflare procede de una función de seguridad de tu configuración de Cloudflare. La misma división sirve para cualquier CDN o firewall.
En tu propio servidor, el registro de errores indica el motivo. Busca en él el minuto en que se produjo el 403:
| Línea del registro | Servidor | Qué significa |
|---|---|---|
directory index of "/var/www/html/" is forbidden | nginx | Una carpeta sin archivo índice; el listado está desactivado |
open() "/var/www/html/index.html" failed (13: Permission denied) | nginx | El usuario del servidor no puede leer el archivo |
access forbidden by rule | nginx | Coincidió una regla allow o deny |
AH01276: Cannot serve directory …: No matching DirectoryIndex … | Apache | Una carpeta sin archivo índice; Indexes está desactivado |
AH01630: client denied by server configuration | Apache | Una regla Require en la configuración o en .htaccess |
Qué corregir:
- Permisos. El usuario del servidor web tiene que poder leer el archivo y entrar en cada carpeta por encima de él. La guía de WordPress recomienda 755 o 750 para carpetas y 644 o 640 para archivos. Nunca pongas 777: permite que cualquier cuenta del servidor modifique el archivo.
- Falta el archivo índice. Añade un
index.htmlo unindex.php. Activar el listado de directorios (autoindex on,Options +Indexes) quita el 403, pero enseña a cualquiera todos los archivos de la carpeta. - Reglas de acceso. Revisa las líneas
deny,Requirey.htaccess, sobre todo después de mudarte a otro hosting o de instalar un nuevo plugin de seguridad. Si el sitio está detrás de una CDN, asegúrate de que ninguna regla bloquee las direcciones de la propia CDN. - Protección contra hotlinking. Las reglas que impiden a otros sitios insertar tus imágenes revisan la cabecera Referer, que indica la página de la que viene una solicitud. Los navegadores no siempre la envían, así que deja pasar las solicitudes que no la llevan.
- El firewall. En Cloudflare, abre la página de seguridad Analytics (analítica) del sitio, selecciona la pestaña Events (eventos) y filtra por la dirección IP del visitante; el registro muestreado indica la acción y la función que actuó. Azure Application Gateway responde con 403 cuando su WAF funciona en modo Prevention (prevención); la guía de solución de problemas de Microsoft explica cómo encontrar el ID de la regla y añadir una exclusión acotada en lugar de desactivar el WAF.
Si tus reglas dependen del país, salir por Proxies residenciales de ese país te muestra exactamente la página que recibe un visitante de allí.
Si ves un 403 en tu código
En un script, el 403 llega como código de estado, y el cuerpo de la respuesta suele decir más de lo que muestra un navegador. Léelo primero. Las causas habituales:
- Una clave que falta, que caducó o que es incorrecta. Las API difieren en cuándo usan 401 o 403. Amazon API Gateway responde 403 ante una clave de API no válida, un token caducado y un método o una ruta que la API no tiene; en este último caso el mensaje dice "Missing Authentication Token", lo que confunde a mucha gente.
- Una clave válida sin el permiso. Al token le falta el alcance (scope) que necesita este endpoint; reenviarlo no servirá.
- Protección CSRF. Para impedir que otros sitios envíen formularios en nombre de un usuario (falsificación de solicitudes entre sitios), los frameworks rechazan un envío sin el token emitido junto con el formulario; Django responde 403 con "CSRF verification failed. Request aborted."
- Reglas de límite de solicitudes y de bots. La API de GitHub responde 403 o 429 cuando superas su límite de solicitudes, con
x-ratelimit-remaining: 0en las cabeceras. El firewall de un sitio puede hacer lo mismo con el tráfico que parece automatizado.
Ante una regla de límite o de bots, compórtate como un visitante que el sitio acepta: ve más despacio, envía un User-Agent que nombre tu herramienta y una dirección de contacto, respeta el robots.txt, usa la API oficial si existe y pide permiso si necesitas más. Copiar las cabeceras de un navegador o cambiar de dirección IP hasta que algo pase va contra la decisión del sitio; no es una solución. Códigos de estado HTTP en web scraping indica qué códigos conviene reintentar y cuáles significan parar.
¿El 403 vino de tu proxy o del sitio?
Detrás de un proxy, dos servidores pueden decir 403. Para una dirección https://, el cliente primero pide al proxy que abra un túnel con una solicitud CONNECT. Si el proxy se niega, por ejemplo porque sus reglas no permiten ese puerto, el sitio nunca te vio. Si el túnel se abre y el sitio te rechaza, el 403 llega a través de él con las cabeceras del propio sitio.
La biblioteca Requests de Python lanza un ProxyError con Tunnel connection failed: 403 Forbidden cuando se rechaza el túnel y devuelve el 403 del sitio como una respuesta normal. Este script distingue los dos casos:
import requests
PROXY = "http://user:pass@pr.proxynet.io:8000"
PROXIES = {"http": PROXY, "https": PROXY}
def who_sent_403(url):
try:
r = requests.get(url, proxies=PROXIES, timeout=20)
except requests.exceptions.ProxyError as err:
if "Tunnel connection failed: 403" in str(err):
return "the PROXY refused the tunnel; the site never saw the request"
raise
if r.status_code == 403:
return f"the SITE answered 403 (Server: {r.headers.get('Server', 'not sent')})"
return f"no 403, status {r.status_code}"
for url in ["https://httpbin.org/status/403", "https://httpbin.org:8443/"]:
print(url, "->", who_sent_403(url))Lo ejecutamos en nuestro propio equipo (Python 3.13, Requests 2.34) a través de un proxy de prueba local que solo abre túneles al puerto 443, como hacen muchos proxies de empresa. La primera dirección es una página de prueba pública que siempre responde 403:
https://httpbin.org/status/403 -> the SITE answered 403 (Server: gunicorn/19.9.0)
https://httpbin.org:8443/ -> the PROXY refused the tunnel; the site never saw the requestLas direcciones http:// sin cifrar no usan túnel, así que los dos tipos llegan como respuestas normales; la cabecera Server y la página permiten distinguirlos. Si un sitio acepta dejar entrar a tu rastreador (crawler), su lista de direcciones permitidas (allowlist) necesita direcciones que no cambien, y eso es lo que ofrecen los Proxies ISP.
Dónde puedes encontrarte un 403
- Portales de la administración pública, de impuestos y de bancos abiertos desde el extranjero o a través de una VPN.
- Documentos compartidos y áreas de administración a las que tu cuenta no tiene acceso.
- El inicio de sesión con una cuenta de Google dentro del navegador integrado de otra aplicación.
- Imágenes insertadas desde un sitio con protección contra hotlinking.
- API después de superar un límite de solicitudes, y herramientas de seguimiento de precios o crawlers de SEO que un firewall trata como bots.
Errores frecuentes
- Vaciar toda la caché una y otra vez. Solo importan las cookies de ese sitio.
- Dar por hecho que el sitio está caído. Un 403 significa que el servidor funciona y rechaza esta solicitud concreta.
- Propietarios: poner permisos 777 o activar el listado de directorios para que desaparezca el error.
- Propietarios: bloquear las direcciones de la CDN con una regla de firewall o un plugin de seguridad.
- Desarrolladores: reintentar un 403 en un bucle cerrado. Un rechazo no cambia, y cada reintento suma a un contador de solicitudes.
Guía de decisión
| Tu situación | Qué hacer |
|---|---|
| Una página "403 Forbidden" sin más en una dirección | Revisa la dirección, usa el menú del sitio |
| Ayer funcionaba con la sesión iniciada | Vuelve a iniciar sesión, borra las cookies de ese sitio |
| Funciona en una ventana de incógnito | Quita la cookie o la extensión responsable |
| Un Ray ID o un ID de incidente en la página | Envíalo al sitio junto con la hora |
| Tu sitio, el registro dice "Permission denied" | Corrige los permisos de archivos y carpetas |
| Tu script recibe "Tunnel connection failed: 403" | Lo rechazó el proxy; revisa el puerto y el destino |
| Tu script recibe el 403 del sitio | Lee el cuerpo, ve más despacio, usa la API oficial |
Preguntas frecuentes
¿Un error 403 Forbidden es culpa mía?
A veces. Una sesión caducada, una cookie, una extensión o tu VPN los puedes arreglar tú. Si el sitio rechaza a propósito tu país, tu red o tu cuenta, solo el sitio puede cambiarlo.
¿Una VPN puede causar un error 403?
Sí, a menudo. Las direcciones de VPN las comparten muchos usuarios, y algunos sitios las rechazan de entrada o después de abusos desde el mismo rango. Si la página se abre con la VPN desactivada, el sitio está rechazando la dirección de la VPN.
¿Por qué me sale un 403 en el teléfono y no en el equipo?
El teléfono suele usar datos móviles con otra dirección IP, puede que una aplicación de VPN solo esté activa en un dispositivo, y cada navegador guarda sus propias cookies. Prueba el teléfono en el mismo Wi-Fi y luego borra los datos del sitio en su navegador.
¿Qué significa "403 disallowed_useragent" al iniciar sesión con Google?
Google rechaza los inicios de sesión dentro de la vista web integrada de una aplicación (un WebView), porque la aplicación podría leer o modificar lo que pasa entre tú y Google. Inicia sesión desde tu navegador habitual o pide al desarrollador de la aplicación que lo corrija.
¿Cuánto dura un bloqueo 403?
Una regla de permisos o de país dura hasta que alguien la cambia. Las reglas de límite de solicitudes y de bots suelen expirar al cabo de minutos u horas; algunas API indican el momento en una cabecera Retry-After o x-ratelimit-reset.
¿Un 403 perjudica a un sitio en la búsqueda de Google?
Sí, en las páginas públicas. Google no indexa las páginas que responden con un código 4xx y retira las que ya estaban indexadas. Además, pide a los propietarios que no usen el 403 para frenar a su rastreador: los códigos 4xx distintos de 429 no cambian la velocidad de rastreo.
En resumen
Un 403 Forbidden significa que un servidor entendió tu solicitud y decidió no atenderla. Como visitante, revisa la dirección, vuelve a iniciar sesión, borra las cookies del sitio, prueba una ventana de incógnito y desactiva la VPN; si te sigue rechazando, contacta con el sitio. Como propietario, averigua quién respondió y luego lee el registro de errores. En el código, lee el cuerpo de la respuesta y distingue el 403 de tu proxy del 403 del sitio. Para monitorización y recopilación de datos que los sitios aceptan, compara los tipos de proxy en nuestra página de proxies.




