2010-03-30 14 views
19

¿Cómo se aplica la política del mismo origen a los siguientes dos dominios?JavaScript misma política de origen: ¿cómo se aplica a diferentes subdominios?

http://server1.MyDomain.com

http://server2.MyDomain.com

¿Puedo ejecutar JS en una página alojada en server1, si el contenido se retreived de servidor2?

editar Según la respuesta de Daniel a continuación, puedo incluir scripts entre diferentes subdominios utilizando la etiqueta <script>, pero ¿qué ocurre con las solicitudes asincrónicas? ¿Qué sucede si descargo un script del servidor2 en la página alojada en server1? ¿Puedo usar el script para comunicarme de forma asíncrona con un servicio en server2?

+1

El kilometraje va a variar un poco con IE, pero la regla general es el mismo host, el mismo puerto para XHR directo. Puede cargar scripts desde cualquier lugar que elija, pero en lo que a asincronización se refiere, la inyección de scripts JSONP es su única opción sin un proxy. –

Respuesta

24

Solo puede incluir scripts entre diferentes subdominios utilizando la etiqueta <script>, ya que está exento de la política.

Usando http://www.example.com/dir/page.html como fuente (de Wikipedia):

Compared URL        Outcome Reason 
--------------------------------------------------------------------------------------------- 
http://www.example.com/dir/page.html  Success Same protocol and host 
http://www.example.com/dir2/other.html  Success Same protocol and host 
http://www.example.com:81/dir2/other.html Failure Same protocol and host but different port 
https://www.example.com/dir2/other.html Failure Different protocol 
http://en.example.com/dir2/other.html  Failure Different host 
http://example.com/dir2/other.html   Failure Different host (exact match required) 
http://v2.www.example.com/dir2/other.html Failure Different host (exact match required) 

ACTUALIZACIÓN:

¿Puedo utilizar la secuencia de comandos para comunicarse asíncrona con un servicio en servidor2?

Sí, puede con JSONP, que se aprovecha de la política abierta para <script> etiquetas para recuperar JSON de otros orígenes.

También es posible que desee considerar el uso de un proxy inverso, como desribed en el siguiente post desbordamiento de pila:

+1

@Daniel, gracias por la respuesta. He editado la pregunta con una pregunta de seguimiento. ¿Alguna posibilidad de que puedas agregar tus pensamientos? Gracias – DaveDev

+0

@Dave: es posible que desee comprobar JSONP. También es posible que desee considerar la configuración de un proxy inverso, como se describe aquí: http://stackoverflow.com/questions/2482916/what-am-i-missing-in-the-xmlhttprequest/2482941#2482941 –

+0

Este es un gran respuesta completa. – wprl

0

Sin duda, puede ejecutar cualquier script que se inserta en el que nunca importa de dónde viene. Piensa en cómo insertar un mapa de Google en tu página.

Lo que describe es un patrón llamado jsonp. Cuando un servidor en otro host devuelve un script que inserta en su página y el script llama a una función en su página con los argumentos de respuesta.

Cuestiones relacionadas