origin headers habilitar domain cross control chrome allow javascript api firefox xmlhttprequest

headers - habilitar cors javascript



Cross-site XmlHttpRequest en Firefox? (5)

Entiendo (creo) que los objetos XmlHttpRequest se adhieren a la política "del mismo dominio". Sin embargo, quiero crear un archivo html local (POC) simple que descargue XML de un servidor web y haga algo con él (comencemos con un simple "alerta ()").

¿Es posible? ¿Necesito una opción especial de configuración de Firefox?

El servidor desde el que intento descargarlo no está bajo mi control (en realidad es una API de Google).

Mi intento simple es el código de la página "Using XMLHttpRequest" de Mozilla . Devuelve un error que realmente no entiendo del método "enviar".

Descargo de responsabilidad: soy principalmente un desarrollador de C / C ++ - nunca hice ninguna programación de JS seria, nunca intenté usar estas API.


Si el XML que está tratando de recuperar es devuelto por una de las API JS de Google, entonces no hay necesidad de XmlHttpRequest (ya que solo se puede usar en el mismo dominio que su página).

Por lo tanto, en el caso de utilizar una API de Google, como la de Mapas, generalmente comienza agregando una referencia a su API común en algún lugar de su página:

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>

A continuación, agregue una referencia a la (s) API (s) específica (s) que planea usar en su página:

<script type="text/javascript">google.load("maps", "2");</script>

Ahora puede llamar a las diversas funciones provistas por esa API:

<script type="text/javascript"> function initialize() { var map = new google.maps.Map2(document.getElementById("map")); map.setCenter(new google.maps.LatLng(41.86, 87.68), 13); } google.setOnLoadCallback(initialize); </script>

No se requiere XmlHttpRequest :)


XMLHttpRequest se adhiere realmente a una implementación mucho más estricta de la misma política de dominio: aunque puede establecer la propiedad document.domain para permitir que JavaScript servido desde dos subdominios se comunique entre sí, no puede hacer eso con XMLHttpRequestObject. En tu caso, yendo a un dominio completamente diferente, tampoco podrías hacer eso con JavaScript.

Hay un par de opciones. Primero, puede usar un proxy inverso para hacer que parezca que el sitio externo es un subdominio de su sitio. Echa un vistazo a mod_proxy de Apache, en particular ProxyPassReverse

Otra alternativa es devolver los datos como un objeto JSON: <script src = "foo"> puede recuperar los datos que quiera desde donde quiera. La desventaja de esto es que no es (fácilmente) repetible (como en múltiples solicitudes de la misma página).

También te recomiendo que busques en Google "mashups de google". La mayoría de estos viven en el dominio "googlemashops.com", lo que hace que la implementación sea mucho más fácil. Algunos viven fuera de ese dominio y pueden darte algunas ideas.

Editar: en lugar de utilizar el objeto XMLHttpRequest directamente, recomiendo ir a través de una biblioteca de terceros como prototype.js


Alternativamente, intente utilizar IE8. Si está ejecutando desde un disco y no un sitio web, IE8 ignorará todas las restricciones de dominio normales y obtendrá los datos que desee.


Puede usar JSONP para hacer esto. Lo hago aquí usando jQuery y PHP. Básicamente utilizo el proxy PHP para envolver la respuesta JSON para que jQuery pueda manejarla. Está bajo BSD.


Con jQuery (y presumiblemente XHR, pero trato de no usarlo directamente) puede hacer solicitudes de dominios cruzados, siempre que no especifique encabezados inusuales o métodos que no sean GET. Si desea utilizarlos, debe tener el control del servidor para habilitar las solicitudes OPTIONS.

Ver https://developer.mozilla.org/En/HTTP_access_control para más detalles.