AJAX Entre Dominios – Proxy PHP

Author: Adrià Cidre  |  Category: Java Script, PHP

Javascript tiene una limitación por la que no se permite hacer llamadas AJAX entre dos dominios distintos. Como todas las limitaciones se ha superado de una forma u otra.

Hoy vamos a ver como superar esta limitación mediante un proxy PHP, y en los siguientes días veremos como hacerlo con CSSHTTPrequest y con JSONP.

Bien, vamos al trapo. Para empezar tenemos que desarrollar un proxy en PHP que haga las peticiones entre dominios en el lugar de Javascript, de este modo podemos llamar desde Javascript a nuestro script ‘proxy.php’ sin salir del dominio actual.

	define ('HOSTNAME', 'http://www.dominiodestino.com/');
	$path = ($_POST['path']) ? $_POST['path'] : $_GET['path'];
	$url = HOSTNAME.$path;
	$session = curl_init($url);

	if ($_POST['path'])
		{
		$postvars = '';
		while (list($clau, $valor) = each($_POST))
			{
			$postvars .= $clau.'='.$valor.'&';
			}
		curl_setopt ($session, CURLOPT_POST, true);
		curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
		}
	curl_setopt($session, CURLOPT_HEADER, false);
	curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

	$xml = curl_exec($session);
	header ("content-type: text/xml");

	echo $xml;
	curl_close($session);

Podemos hacer peticiones AJAX a este script como si se las hiciéramos al dominio de destino, simplemente teniendo en cuenta que debemos pasar la variable path con el path del dominio de destino.

En prototype la petición sería:

	new Ajax.Request("proxy.php", {
	  method: 'post',
	  parameters: "&path=index.php&text=hola",
	  onSuccess: function(transport){
	  	alert(transport.responseText);
	  }
	});

Es una solución funcional pero deja bastante que desear, puesto que no solo estamos consumiendo ancho de banda del cliente, sino que además lo estamos haciendo de nuestro servidor, por lo que las peticiones tardarán ‘el doble’ en responder.
Afortunadamente y como comentaba antes no es la única solución, por eso veremos cuales són las otras en los siguientes posts.