Como ya se ha explicado y se ha podido comprobar en algunos de los ejercicios, los navegadores imponen restricciones muy severas a las conexiones de red que se pueden realizar mediante AJAX. Esta característica se conoce como "el problema de los dominios diferentes" (en inglés, "cross-domain problem").
El código JavaScript alojado en un servidor, no puede realizar conexiones con otros dominios externos. También existen problemas entre subdominios de un mismo sitio web, que se pueden evitar con el uso de la propiedad document.domain
.
Afortunadamente, existen opciones para poder realizar conexiones con cualquier dominio externo al servidor que aloja el código JavaScript. Todas las soluciones que son viables técnicamente y que funcionan de la misma forma en cualquier navegador hacen uso de recursos en el servidor que aloja el código JavaScript original.
La solución más sencilla es la de habilitar el módulo mod_rewrite
en los servidores web de tipo Apache. Con este módulo activado, Apache se puede convertir en un proxy transparente que realice las peticiones externas en nombre del script y le devuelva los resultados.
En el siguiente ejemplo, el navegador descarga el script desde el servidor1
. Por este motivo, el código del script puede solicitar recursos del servidor1
, pero no puede establecer conexiones con el servidor2
:
Figura 11.1. El script descargado desde el servidor1 no puede establecer conexiones de red con el servidor2
La solución más sencilla para resolver este problema consiste en configurar el servidor web del servidor1
. Si se utiliza el servidor web Apache, para configurar el proxy transparente, se habilita el módulo mod_rewrite
y se añaden las siguientes directivas a la configuración de Apache:
RewriteEngine on RewriteRule ^/ruta/al/recurso$ http://www.servidor2.com/ruta/al/recurso [P]
Ahora, el código de la aplicación puede acceder a cualquier recurso del servidor2
ya que:
servidor1
se transforma automáticamente a: http://www.servidor2.com/ruta/al/recursoservidor1
obtiene la respuesta del servidor2
y la envía de nuevo al scriptFigura 11.2. Utilizando un proxy transparente, los scripts pueden acceder a los recursos que se encuentren en cualquier servidor
Además de utilizar el servidor web como proxy transparente, también es posible diseñar un proxy a medida mediante software. Yahoo por ejemplo ofrece una extensa documentación para los desarrolladores de aplicaciones web. Entre esta documentación, se encuentra un artículo sobre el uso de proxys para evitar el problema de las peticiones externas de AJAX: http://developer.yahoo.com/javascript/howto-proxy.html
Además, Yahoo ofrece un proxy de ejemplo realizado con PHP y que puede ser utilizado para conectar aplicaciones JavaScript con sus servicios web.