¿Cómo funcionan los mashups con la política del mismo origen?

11

Si Javascript solo puede acceder a los scripts del mismo dominio, ¿cómo puede un sitio web crear mashups que deben leer y modificar el contenido de otro dominio?

Jack Richardson
fuente

Respuestas:

7

Soluciones de navegadores cruzados

JSONP

Si la API a la que intenta acceder es compatible con JSONP , solo tiene que proporcionar un nombre de función de JavaScript en su solicitud, entonces JSONP devuelve JavaScript como el myfunc({the:data});que puede ejecutar como un JavaScript normal, por lo que crearía una nueva <script src="www.website.com/somecall?jsonp=myfunc">etiqueta para "enviar una solicitud" (jQuery hace esto automáticamente si lo usa type: jsonpen las $.ajaxsolicitudes).

La desventaja es que requiere que el proveedor de la API admita JSONP.

Destello

Flash puede acceder a contenidos de dominios cruzados siempre que el sitio web de destino tenga un crossdomain.xmlarchivo en su raíz que diga que lo permite, que suele ser el caso en los servidores que proporcionan una API).

La desventaja es que requiere Flash en el navegador del usuario y que el sitio web del que obtiene datos debe tener un crossdomain.xml que permita solicitudes de dominios cruzados.

Script del lado del servidor en el mismo nombre de dominio

Los lenguajes del lado del servidor como PHP no tienen restricciones de BS del mismo dominio, por lo que podría tener un script que actúe como proxy (por ejemplo, descargar a través de una de las extensiones http como cURL).

El beneficio adicional es que puede limpiar los datos (o incluso combinar varias fuentes) en el servidor, antes de reenviarlos a su página web / javascript, por lo que incluso puede extraer solo la parte útil de los datos, lo cual es bueno cuando se hace una aplicación web móvil donde el ancho de banda puede ser un problema.

La desventaja es que todas las solicitudes tienen que pasar a través de su servidor, por lo que aumenta la carga en su servidor.

Sin embargo, el beneficio es que funcionaría con cualquier recurso ya que no requiere que el destino admita crossdomain o jsonp. Entonces, si nada más funciona, esto funcionaría.


Soluciones específicas para algunos navegadores.

explorador de Internet

Internet Explorer tiene solicitud de dominio cruzado

Firefox

Firefox 3.5+ tiene el estándar de intercambio de origen cruzado , pero requiere el recurso al que está intentando acceder para incluir encabezados especiales, por ejemplo, en PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

Algunos otros navegadores principales también admiten esto , por lo que si no necesita admitir navegadores antiguos y si puede obtener los recursos a los que intenta acceder para enviar esos encabezados, esta puede ser su mejor opción, de lo contrario, el lado del servidor El guión sería mi recomendación.


Firefox también tiene una configuración de usuario capability.policy.default.XMLHttpRequest.open, pero no cuento con que el usuario cambie una configuración en su navegador.

picos salvajes
fuente
0

Puede usar API (de otro dominio) para eso. Su Javascript llamará al archivo PHP (u otro archivo de script) que esté en su servidor web (su dominio), que llamará a la API (de otro dominio usando CURL) y recibirá la respuesta.

Harish Kurup
fuente
Esta respuesta no necesita ser tan específica sobre la tecnología utilizada en el servidor.
funkybro
@funkybro sí, fue solo un ejemplo ... nada específico ...
Harish Kurup