2011-10-06 9 views
14

Tengo un sitio http:// que necesita acceder a una API JSON de un tercero expuesta en un sitio https://. He leído a través Ways to circumvent the same-origin policy, pero parece que los métodos allí descritos no son apropiados para mí:¿Cómo eludir la política del mismo origen para un sitio https de terceros?

  1. El método document.domain - sólo funciona en subdominios.
  2. Método de intercambio de recursos entre orígenes - requiere la cooperación del servidor.
  3. El método window.postMessage - parece requerir la apertura de una ventana emergente?
  4. El método Reverse Proxy - Una posible solución, pero parece un poco difícil de configurar.
  5. http://anyorigin.com - Parece que no es compatible con SSL.

¿Esto es esto? ¿Debo implementar la solución 4, que parece bastante complicada, o me falta algo?

+3

¿No puedes rizar el resultado del otro sitio con una página normal de PHP en su propio dominio y luego agarrar el JSON de esa página PHP? –

+0

¿No funcionaría [JSONP] (http://en.wikipedia.org/wiki/JSONP) aquí? – jwueller

+0

Estoy bastante seguro de que anyorigin.com es compatible con SSL. Trate de buscar 'https: // test.kems.net /', por ejemplo, funciona bien. –

Respuesta

12

Lo sentimos, parece que anyorigin.com hace https apoyo.

La razón por la que ingenuamente pensé que no es porque el API in question devuelve JSON, y pensé que realmente obtendría una respuesta de texto sin formato (como en mis pruebas con el uso de anyorigin.com en google.com). Cuando devolvió un object, pensé que algo estaba roto.

Parece que el objeto simplemente devuelve el JSON analizado, ¡así que estoy listo para empezar!

actualización - anyorigin.com dejó de trabajar con algunos sitios https unas pocas semanas después de que he publicado esto, así que siguió adelante y escribió whateverorigin.org, una alternativa de código abierto a anyorigin.

+0

@RobW - abre un problema en github. Investigaré esto el viernes (no puedo prometer nada antes) - https://github.com/ripper234/Whatever-Origin – ripper234

+0

esos métodos no funcionarán si el servidor remoto devuelve contenido diferente en función de quién solicita algo. Por ejemplo, YouTube devuelve una página web para un video desde el que puede extraer una URL de reproducción, por ejemplo para MP4 que solo funcionará (por ejemplo, para buscar como archivo .mp4) si la utiliza el llamador, no un cliente de la persona que llama (cuando llama es un proxy) –

+0

** Escribí una respuesta para esta pregunta aquí: [Cargando la página html de dominio cruzado con jQuery AJAX] (http://stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with -jquery-ajax/17299796 # 17299796) ** - _ el último, es compatible con https_ – jherax

0

JSONP debe estar en su lista, y más arriba. Más o menos el estándar. Requiere la cooperación del servidor, pero la mayoría de las API deben saber lo que están haciendo y apoyarlo.

here es una verdadera valoración crítica básica de cómo funciona

3

Puede usar Ajax-cross-origin un plugin jQuery. Con este complemento utiliza jQuery.ajax() dominio cruzado.

Es muy fácil de usar:

$.ajax({ 
     crossOrigin: true, 
     url: url, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 

Puede leer más aquí: http://www.ajax-cross-origin.com/

Cuestiones relacionadas