cross-domain ajax request
El standard XMLHttpRequest() definido por la W3C limita las llamadas javascript a nuestro propio dominio. Esto se definió así en su día por temas de seguridad y porque no parecía necesario realizar llamadas a webs externas.
Con los años, la evolución de las webs, popularización de apis publicas etc. Ha quedado demostrado que el segundo punto no era correcto. Visto esto la W3C se volvió a poner manos a la obra, modifico ligeramente el standard y a día de hoy ya podemos realizar llamadas ajax cross-domain con los últimos navegadores sin necesidad de alternativas rebuscadas.
Para mantener el filtro de seguridad ahora los distintos sites que deseen ser accesibles mediante llamadas ajax deberán incluir en las cabeceras http a que dominios dan acceso. Ejemplo:
<?php header('Access-Control: allow <?*>'); ?> //Permitir todos
<?php header('Access-Control: deny <?*>');?> //Denegar todos
<?php header('Access-Control: allow <?ab.net>');?>
//Permitir solamente ab.net
En cuanto a la parte de javascript: chrome 2, safari 4 y firefox 3.5 siguen el standard e IE8 se ha inventado una función con otro nombre que hace exactamente lo mismo (para variar…). Ejemplo de el código javascript:
var url = "http://www.proyecto-f.net/";
if(XMLHttpRequest) {
var request = new XMLHttpRequest();
if("withCredentials" in request) {
// Firefox 3.5 y compañia
request.open('GET', url, true);
request.onreadystatechange = handler;
request.send();
} else if (XDomainRequest) {
// IE8
var xdr = new XDomainRequest();
xdr.open("get", url);
xdr.send();
} else {
// Otros navegadores
}
}
Posts relacionados:
