same origin crossorigin control bypass allow javascript same-origin-policy

origin - Solución de la política del mismo origen con document.domain en Javascript



same origin policy (2)

Estoy teniendo problemas de política con el mismo origen en Javascript. He leído sobre una solución para esto usando la variable document.domain , pero no puedo hacer que la solución funcione. La solución es que debe poder configurar document.domain en ''example.com'' para que si ejecuta el código desde foo.example.com puede cargar datos a través de XHR desde bar.example.com .

Los detalles sobre la solución están aquí:

https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript

Mi código de ejemplo, que no produce los resultados deseados, se ejecuta desde una URL como http://foo.example.com/ :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <script> document.domain = ''example.com''; window.onload = function() { var req = new XMLHttpRequest(); var url = ''http://bar.example.com/''; req.open(''GET'', url, true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { var elem = document.getElementById(''result''); if (req.status == 200) { var data = req.responseText; } else { var data = "Error loading page: " + req.status; } elem.innerHTML = data; } }; req.send(null); }; </script> Result:<hr> <div id="result"></div> </body> </html>

La salida de este código:

Result: Error loading page: 0

Si cambio la url a ''http://foo.example.com/'' , todo funciona correctamente. ¿Hay un error en mi código de ejemplo?

No quiero usar un proxy porque son más lentos, menos eficientes y aumentarán el tráfico en nuestro servidor web. Sería realmente genial si esta solución funcionara. ¿Es esta solución "pastel en el cielo"?


Dado que Mic respondió por qué no funciona, pensé que compartiría la solución de "cómo" hacer que el trabajo entre dominios. Ver mi publicación de SO here .


document.domain permite la comunicación entre frames / iframes. No XHR.

<body> <iframe src="http://bar.example.com/"></iframe> <script> document.domain = ''example.com''; var ifr = document.getElementsByTagName(''IFRAME'')[0]; ifr.onload = function(e){ //will log the string "BODY" in the console console.log(ifr.contentWindow.document.body.tagName); }; </script> </body>

Si elimina la línea con document.domain , la lectura del contenido de contentWindow generará el error de la misma política de origen.