Quería hacer un wiki de la comunidad con respecto a las políticas de mismo origen de HTML/JS para, con suerte, ayudar a cualquiera que busque este tema. Este es uno de los temas más buscados en SO y no hay una wiki consolidada para ello así que aquí voy :)
La política del mismo origen impide que un
documento o script cargado desde un origen obtenga o establezca propiedades de un documento de otro de otro origen. Esta política se remonta a hasta Netscape Navigator 2.0.
Por favor, haz que los ejemplos sean verbales y, preferiblemente, enlaza también tus fuentes.
Configurar un simple proxy inverso en el servidor, permitirá al navegador utilizar rutas relativas para las peticiones Ajax, mientras que el servidor estaría actuando como un proxy hacia cualquier ubicación remota.
Si se utiliza mod_proxy en Apache, la directiva de configuración fundamental para configurar un proxy inverso es el ProxyPass
. Normalmente se utiliza de la siguiente manera:
ProxyPass /ajax/ http://other-domain.com/ajax/
En este caso, el navegador podría solicitar /ajax/web_service.xml
como una URL relativa, pero el servidor lo serviría actuando como proxy a http://other-domain.com/ajax/web_service.xml
.
Una característica interesante de este método es que el proxy inverso puede distribuir fácilmente las peticiones hacia múltiples back-ends, actuando así como un equilibrador de carga.
Personalmente, window.postMessage
es la forma más fiable que he encontrado para los navegadores modernos. Tienes que hacer un poco más de trabajo para asegurarte de que no te estás abriendo a los ataques XSS, pero es una compensación razonable.
También hay varios plugins para los conjuntos de herramientas de Javascript más populares que envuelven window.postMessage
y proporcionan una funcionalidad similar a los navegadores más antiguos que utilizan los otros métodos mencionados anteriormente.