iframe rechazó la conexión: por qué pasa y cómo arreglarlo

iframe rechazó la conexión

iframe rechazó la conexión: causas y soluciones, con comprobador | We.Inc

Por qué un iframe muestra "rechazó la conexión": X-Frame-Options o CSP frame-ancestors en la página enmarcada. Pega sus cabeceras de respuesta para ver el veredicto y copia la solución para el servidor.

El recuadro gris de "rechazó la conexión" significa que la página dentro de tu iframe le dijo al navegador que no se deja enmarcar. Lo hace con una cabecera de respuesta X-Frame-Options (DENY o SAMEORIGIN) o con una regla frame-ancestors de Content-Security-Policy. Solo el servidor del sitio enmarcado puede quitarla. Pega sus cabeceras abajo para ver qué regla te bloquea.

Qué significa cada valor de cabecera para tu iframe

Este error no es un fallo de red y tu etiqueta iframe no tiene nada mal. El navegador descargó la página, leyó una cabecera que prohíbe enmarcarla y sustituyó el contenido por un error. El motivo es la protección contra clickjacking: una página que cualquiera puede enmarcar puede cubrirse con botones invisibles. La solución depende de qué servidor envió la cabecera.

Preguntas frecuentes

¿Puedo saltarme el "rechazó la conexión" desde mi propia página?

No. La regla la aplica el navegador del visitante en nombre del sitio enmarcado, y ningún atributo de tu iframe puede anularla. Las únicas vías son cambiar las cabeceras del sitio enmarcado, usar una URL para insertar que el sitio ofrezca para iframes o enlazar hacia fuera.

¿Por qué mi propio sitio no carga en su propio iframe?

Comprueba si hay X-Frame-Options: DENY o frame-ancestors 'none'. Ambas bloquean a cualquier página padre, incluidas las del mismo dominio. Cambia a SAMEORIGIN o frame-ancestors 'self'. Recuerda que un subdominio o un puerto distinto es un origen distinto.

¿Debo usar X-Frame-Options o frame-ancestors?

Usa frame-ancestors, porque puede listar varias páginas padre permitidas y gana siempre que ambas están presentes. Si también envías X-Frame-Options, mantenla coherente con la regla CSP para no confundir a la próxima persona que lea la configuración.

¿Por qué un enlace de vídeo o de mapa rechaza la conexión?

La página normal de reproducción o del lugar suele enviar una cabecera contra el enmarcado, mientras que el servicio publica una dirección aparte para insertar pensada para iframes, a menudo en Compartir y luego Insertar. Nuestro generador de código para insertar convierte los enlaces compatibles en esas direcciones por ti.

¿frame-ancestors comprueba todos los marcos padre?

Sí. Si tu iframe está dentro de otro iframe, todos los ancestros hasta la página superior deben cumplir la política, no solo el padre directo.

Lee la cabecera, no el error

Cómo arreglarlo en un servidor que controlas

Cuando no es tu sitio

Soluciones de servidor que puedes copiar

Cada ejemplo permite el mismo sitio más un sitio asociado. Sustituye https://partner.example por el origen que debe poder enmarcarte, o usa 'none' para bloquear a todos.

always mantiene la cabecera también en las páginas de error. Elimina cualquier línea antigua de X-Frame-Options para que las dos reglas no se desincronicen.

Apache (.htaccess o virtual host)

Necesita mod_headers. Header always set sustituye cualquier valor anterior de la misma cabecera.

Express con Helmet

Helmet establece X-Frame-Options en SAMEORIGIN por defecto. Desactivarlo y definir frame-ancestors mantiene una única fuente de verdad.

Next.js (next.config.js)

headers() añade cabeceras de respuesta a cada ruta que coincide. Las plataformas de hosting pueden añadir las suyas, así que revisa después la respuesta en vivo.

Comprobador de cabeceras de respuesta

Pega las cabeceras de respuesta de la página que va dentro del iframe. Todo se ejecuta en esta página; no se descarga nada.

Cabeceras de respuesta de la página enmarcada

Origen de la página que contiene el iframe

Origen de la página enmarcada

Restaurar las cabeceras de ejemplo

Veredicto

Esta página padre puede enmarcar la página.

El navegador se negará a mostrar esta página en el iframe.

Todavía no hay un veredicto claro.

Bloqueado por Content-Security-Policy: frame-ancestors 'none'.

Permitido por frame-ancestors: {v} coincide con el origen padre.

Bloqueado por frame-ancestors: ninguna fuente de la lista coincide con {v}.

X-Frame-Options está presente pero se ignora, porque decide frame-ancestors.

Bloqueado por X-Frame-Options: DENY.

Permitido por X-Frame-Options: SAMEORIGIN, y los orígenes coinciden.

Bloqueado por X-Frame-Options: SAMEORIGIN, y {v} es un origen distinto.

ALLOW-FROM está obsoleto y se ignora, así que no bloquea.

X-Frame-Options tiene varios valores distintos. Envía exactamente uno.

Content-Security-Policy-Report-Only nunca bloquea; se ha omitido.

No se encontró ninguna cabecera contra el enmarcado, así que cualquier sitio puede enmarcar esta página.

Introduce ambos orígenes como URL completas, por ejemplo https://example.com.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio