2008-11-27 13 views
6

Por lo que entiendo, debido a la aplicación de la "misma política de origen" en los navegadores actuales, es imposible obtener datos de una XmlHttpRequest enviada a un dominio diferente al dominio original de Javascript.¿Cómo se pueden consumir los servicios web remotos desde un script del lado del cliente?

Tengo casi cero experiencia con respecto a este asunto, por lo que estoy confundido acerca de que los servicios web son inutilizables desde Javascript. ¿Significa que las aplicaciones web con funcionalidad Ajax solo pueden interactuar entre sí sin llamar a servicios proporcionados por otros dominios? ¿Cómo funcionan los "mash-ups"? Supongo que los servicios se consumen en el lado del servidor, luego los datos se pasan al cliente a través de llamadas Ajax locales. No lo sé.

La única forma en que me imagino para lograr el consumo de servicios por parte del cliente sería recuperar un archivo Javascript directamente del dominio del servicio web objetivo a través de una etiqueta <script>, luego usar su API para interactuar con el dominio remoto.

¿Alguien puede aclararme?

+0

En realidad, usted tiene una buena comprensión de la misma. Solo recuerde que Ajax es simple y antiguo http. –

+0

Sí, lo golpeaste bien en la cabeza ... ¡incluyendo las soluciones! –

Respuesta

6

En su pregunta su mencionado la <script> truco. JSONP está basado en eso. It was formally proposed almost 3 years ago by Bob Ippolito. No le da derecho a hablar con el origen del script. — el origen está definido por su página web, no por lo que incluya. Funciona solo porque el servidor ajusta JSON en una función de calibración, que debe definirse en su código, y se ejecutará mediante el script < > cuando se cargue. El ejemplo más famoso de JSONP serían los servicios de Yahoo, incluido Flickr.

Otra técnica es usar window.name para transferir la información. This technique was detailed by Kris Zyp four month ago. Además, su artículo compara el transporte window.name con JSONP. No conozco ningún proveedor de servicios de alto perfil que sea compatible con este nuevo transporte. Obviamente, cambiará con el tiempo.

Por supuesto, debería mencionar el próximo Microsoft XDomainRequest. Se planea enviarlo con IE8, y ningún otro proveedor se comprometió a admitirlo, pero se presentó para su inclusión en HTML 5. XDR es una funcionalidad útil, pero sospecho que se cambiará varias veces antes de ser aceptado.

Si miró en los enlaces, probablemente ya sepa que todos estos métodos requieren un cierto nivel de cooperación de un servidor de terceros. No puede usar servicios aleatorios a voluntad. Si tiene que usar un servicio no cooperativo, la única solución es realizar un proxy a través de su propio servidor con todos los problemas asociados: la legalidad cuestionable, el rendimiento reducido, la mayor carga en su servidor, la menor cantidad de conexiones entre el navegador del usuario y su servidor, y así sucesivamente.

3

Tenga una mirada en JSONP, que trabaja en torno a la política del mismo origen utilizando más o menos el enfoque que usted está describiendo, sólo asegúrese de que confía en que la recibe de ...

+0

Gracias, investigaré un poco sobre JSONP. – Franck

Cuestiones relacionadas