2009-05-30 15 views
13

Digamos que tengo un dominio, js.mydomain.com, y apunta a alguna dirección IP, y algún otro dominio, requests.mydomain.com, que apunta a una dirección IP diferente. ¿Puede un archivo .js descargado desde js.mydomain.com hacer las solicitudes Ajax al requests.mydomain.com?¿Cómo se aplica exactamente la política del mismo dominio?

¿Exactamente cómo los navegadores modernos imponen la misma política de dominio?

Respuesta

11

La respuesta breve a su pregunta es no: para las llamadas AJAX, solo puede acceder al mismo nombre de host (y puerto/esquema) desde el que se cargó su página.

Hay un par de soluciones: una es crear una URL en foo.example.com que actúe como un proxy inverso para bar.example.com. Al navegador no le importa dónde se realiza realmente la solicitud, siempre que el nombre de host coincida. Si ya tiene un servidor web Apache front-end, esto no será demasiado difícil.

Otra alternativa es AJAST, que funciona insertando etiquetas de script en su documento. Creo que así es como funcionan las API de Google.

Encontrará una buena descripción de la política del mismo origen aquí: http://code.google.com/p/browsersec/wiki/Part2

+0

Gracias! Esto ayudó mucho - AJAST parece una gran opción. –

+0

FWIW, IE generalmente no se preocupa por el puerto. http://blogs.msdn.com/ieinternals/archive/2009/07/23/The-IE8-Native-XMLHttpRequest-Object.aspx – EricLaw

+3

También vale la pena mencionar que la dirección IP no importa en absoluto (en ningún navegador) - - SÓLO es el puerto protcol/scheme, el host y (en algunos casos) el puerto que determina el origen. Esto significa que dos orígenes diferentes servidos desde la misma IP * no pueden * comunicarse, y que el mismo origen se sirve en múltiples direcciones IP que un equilibrador de carga * puede * comunicar. – EricLaw

1

Esto no funcionará porque el nombre de host es diferente. Dos páginas se consideran del mismo origen si tienen el mismo host, protocolo y puerto.

De Wikipedia sobre the same origin policy:

El término "origen" se define utilizando el nombre de dominio, la capa de aplicación protocolo, y (en la mayoría de los navegadores) TCP puerto del documento HTML que ejecuta el script . Dos recursos se consideran que son del mismo origen si y solo si todos estos valores son exactamente los mismos .

Cuestiones relacionadas