Hi Support team!
When I try embedding with the provided js snippet, it will stuck at “Loading Discussion” and I get the following error:
Invalid X-Frame-Options: “ALLOWALL” header from ...
How can I resolve this issue?
Thanks!
Esto puede estar un poco tarde, pero me encontré con el mismo problema y habría agradecido una respuesta aquí. Mi problema solo apareció al usar Firefox. Chrome funcionó sin problemas. Lo solucioné agregando el sitio que incrusta el contenido a la configuración de “cors origins”. Conseguí la pista aquí.
Acabo de notar que nuestros sitios también están experimentando este problema, pero solo con las nuevas publicaciones, no con las existentes que ya tenían un tema asociado creado. El encabezado Invalid X-Frame-Options parece ser más una advertencia de Firefox que un error real, ya que siempre aparece, incluso cuando la incrustación tiene éxito.
Un ejemplo funcional (con un tema existente cuando la incrustación solía funcionar)
Mientras que esta página de destino:
recibe finalmente una respuesta de error 400 Bad Request de nuestra instancia de Discourse.
He estado revisando estos foros y la documentación para averiguar por qué podría estar ocurriendo esto, pero aún no he encontrado nada. Pensé que podría estar relacionado con que incluyéramos el nombre de usuario de Discourse en la carga útil de la incrustación, pero esto también ocurre con el contenido creado por usuarios que están correctamente sincronizados (por ejemplo, Winter School on Agent-Based Modeling of Social-Ecological Systems).
Cosas que he verificado:
DISCOURSE_ENABLE_CORS: trueestá configurado- Los hosts de CORS son correctos en la configuración de Discourse con https
- Los hosts permitidos están configurados correctamente (además, la incrustación funciona para publicaciones de Discourse ya creadas)
¿Hay algo más que deba considerar investigar? Lo único otro en lo que puedo pensar es que recientemente integramos nuestros sitios con CloudFlare, por lo que quizás haya alguna configuración de CloudFlare que deba realizarse para que todo funcione correctamente. Todavía estoy desconcertado por la razón por la cual los temas existentes funcionan correctamente…
Deberías intentar desactivar Cloudflare temporalmente y ver si eso ayuda. Es bastante fácil de hacer…
Buenas, lo probé en nuestro sitio de staging pero, por desgracia, no solucionó el problema..
En Chrome veo errores como el siguiente:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://test-discourse.comses.net') does not match the recipient window's origin ('https://test.comses.net').
(de https://test.comses.net/codebases/f0613922-9cb1-4656-a26c-af57f823fb69/releases/3.2.0/)
Otras personas aquí parecieron solucionar esto asegurándose de que DiscourseEmbed.discourseEmbedUrl coincidiera con la URL de referencia, pero verifiqué que seguía siendo correcta.. Revisé los registros de Discourse (¿debería estar mirando en /var/discourse/shared/standalone/log/rails/production.log?), pero tampoco vi errores allí.. ¿Alguna otra idea sobre dónde buscar para solucionar esto?
Un ejemplo de los registros de Discourse:
Started GET "/embed/comments?embed_url=https%3A%2F%2Ftest.comses.net%2Fcodebases%2Ff0613922-9cb1-4656-a26c-af57f823fb69%2Freleases%2F3.2.0%2F" for 72.201.57.141 at 2020-08-05 05:15:40 +0000
Processing by EmbedController#comments as HTML
Parameters: {"embed_url"=>"https://test.comses.net/codebases/f0613922-9cb1-4656-a26c-af57f823fb69/releases/3.2.0/"}
Rendering embed/loading.html.erb within layouts/embed
Rendered embed/loading.html.erb within layouts/embed (Duration: 0.4ms | Allocations: 134)
Completed 200 OK in 91ms (Views: 1.8ms | ActiveRecord: 0.0ms | Allocations: 16308)
Started GET "/service-worker-c8000968830b6f6bd33f1e842dffdd569664119d449f93dc7d428d963a71635d.js" for 72.201.57.141 at 2020-08-05 05:15:42 +0000
Processing by StaticController#service_worker_asset as */*
Rendering text template
Rendered text template (Duration: 0.0ms | Allocations: 1)
Completed 200 OK in 27ms (Views: 1.3ms | ActiveRecord: 0.0ms | Allocations: 6617)
Tengo el mismo problema. Puedes verlo en vivo, por ejemplo, en: Making sure you're not a bot!, donde en la parte inferior está incrustada la discusión de @mock/mock - Fedora Discussion. Ten en cuenta que discussion.fedoraproject.org es una instancia de pago proporcionada como servicio por Discourse.
Lo que me desconcierta es que la discusión a veces se carga y otras veces no. Puedo reproducirlo (casi siempre) en el modo privado de Firefox (versión 80).
La herramienta de desarrollador muestra:
Se encontró un encabezado X-Frame-Options no válido al cargar «https://discussion.fedoraproject.org/embed/comments?embed_url=https%3A%2F%2Fcopr.fedorainfracloud.org%2Fcoprs%2Fg%2Fmock%2Fmock%2F»: «ALLOWALL» no es una directiva válida.
Y, de hecho, la documentación X-Frame-Options header - HTTP | MDN no reconoce ALLOWALL como un valor válido.
Parece que el tema al que has enlazado en https://discussion.fedoraproject.org/t/mock-mock/3107 está en una categoría protegida; no puedo acceder a él como usuario anónimo. Siempre que tu foro Discourse y tu sitio web compartan el mismo dominio raíz, esperaría que los comentarios incrustados se carguen para los usuarios que han iniciado sesión en el foro, pero fallen para los usuarios que no han iniciado sesión. ¿Suena esto como lo que estás viendo?
Esperaría que los comentarios incrustados se carguen para los usuarios que han iniciado sesión en el foro, pero que fallen al cargarse para los usuarios que no han iniciado sesión. ¿Suena esto como lo que estás observando?
Efectivamente, parece ser el caso. He podido reproducir este comportamiento tanto en Google Chrome como en Firefox. Sin embargo, la discusión no se carga en el modo incógnito de ninguno de esos navegadores; no sé si eso signifique algo. Pero supongo que aún nos indica la necesidad de actualizar la categoría para que pueda ser vista por todos.
Gracias. Después de editar la categoría y agregar “todos” en la pestaña de Seguridad con permisos para “crear/responder/ver”, la incrustación vuelve a funcionar.
Así que después de la última actualización de Discourse, todas las páginas incrustadas ahora muestran un error ![]()
Un mensaje de error típico que vemos ahora es algo así, lo que parece indicar que el navegador está eliminando el referer y provocando que el código de incrustación de Discourse falle en sus comprobaciones de validación:
Referer: `https://www.comses.net/`
El referer no se envió o no coincidió con ninguno de los siguientes hosts:
* www.comses.net/codebases/.*
Página de ejemplo: Artificial Anasazi
En Chrome, incluso con Privacy Badger y todas las demás extensiones desactivadas, el mensaje de error del referer siempre parece aparecer y probablemente se deba a A new default Referrer-Policy for Chrome - strict-origin-when-cross-origin | Blog | Chrome for Developers ACTUALIZACIÓN: esto ahora funciona para temas existentes después de agregar una política de referer explícita en el sitio de origen (por ejemplo, https://www.comses.net), por lo que para haproxy algo como: http-response set-header Referrer-Policy "no-referrer-when-downgrade"
En Firefox y Chrome, las páginas con temas existentes funcionan, pero las páginas que intentan crear un nuevo tema fallan como en este caso: The Bronze Age Collapse model (BACO model).
He modificado nuestra configuración de haproxy para establecer encabezados de respuesta para Content-Security-Policy frame-ancestors y eso solucionó un error de X-Frame-Options ALLOWALL no reconocido en Firefox, pero ahora la solicitud se agota y finalmente resulta en un error 400 Bad Request desde nuestro foro de Discourse..
El error parece estar relacionado con postMessage:
No se pudo ejecutar 'postMessage' en 'DOMWindow': El origen de destino proporcionado ('https://forum.comses.net') no coincide con el origen de la ventana receptora ('https://www.comses.net').
Tendré más tiempo para profundizar a finales de este mes, cuando tenga un poco más de tiempo libre, pero quería compartir mis ideas mientras aún está medio fresco; ¡espero que alguien más descubra una solución alternativa mientras tanto! ![]()
A mí me pasa lo mismo. Espero que alguien aquí pueda ayudar un poco con este error. En mi caso, tengo un blog de pruebas y un blog oficial… ambos hechos con Webflow… en el blog de pruebas todo funciona bien, pero en el blog en vivo aparece este error…
### Error al incrustar
Referente: `https://www.pynk.io/blog/what-to-invest-in-look-around-you`
El referente no se envió o no coincide con ninguno de los siguientes hosts:
[espacio en blanco aquí]
Disculpa la tardanza en responder. ¿Podrías probar agregando discourseReferrerPolicy: 'no-referrer-when-downgrade' al objeto DiscourseEmbed que se establece en el fragmento de código de incrustación? Hay un ejemplo completo de un fragmento de código que agrega esa propiedad aquí: Embed Discourse comments on another website via Javascript - #353.
Si lo intentas, por favor avísanos si eso resuelve el problema.
Creo que esto ya se resolvió aquí: Embed Discourse comments on another website via Javascript - #365. En ese caso, el problema era la falta del subdominio www en el registro del host incrustable de Discourse.
Edición: este problema ya se ha solucionado en el código principal de Discourse. Ya no es necesario establecer la variable discourseReferrerPolicy en 'no-referrer-when-downgrade'. Ahora, Discourse establece la política de referencia en 'no-referrer-when-downgrade' de forma predeterminada. Para más detalles al respecto, consulta https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963#setting-the-referrer-policy.
Agregar discourseReferrerPolicy solucionó el problema: ¡gracias, @simon !! ![]()
Esto podría estar causando problemas con SSO. Tengo un current.discourse.example que está utilizando sso.discourse.example como host SSO. Cuando has iniciado sesión, la lista de temas se muestra correctamente. Pero cuando eres anónimo, no se muestran y aparece el error mencionado anteriormente. La URL /embed/topics?... muestra una página en blanco.
Creo —o espero— que esto debería solucionarse con:
Content-Security-Policy: frame-ancestors https://current.discourse.example https://sso.discourse.example;