javascript - que - Se rechazó la solicitud de ajax de subdominio cruzado incluso cuando document.domain está configurado correctamente
que es cross domain (4)
¿No es posible realizar solicitudes regulares de ajax en subdominios?
Técnicamente, esto no es AJAX, pero puede imitar una solicitud de AJAX con un envío de formulario que va con éxito a un dominio cruzado. El inconveniente es que no puede acceder a la respuesta y esto hará que la página sea redirigida a la URL de ACTION
del formulario.
En lugar de esto:
jQuery.post(''https://www.com'',
''offerCode'':523153,
''accountNumber'':'''',
''_item.x'':''42'',
''_item.y'':''21''
});
Utilizar esta:
jQuery(''<form action="https://www.com" method="POST">
<input type="text" name="offerCode" value="523153">
<input type="text" name="accountNumber" value="">
<input type="text" name="_item.x" value="42">
<input type="text" name="_item.y" value="21">
</form>'').trigger(''submit'');
En mi aplicación tengo un sitio web en un subdominio (dev.u413.com) y utilizo jQuery para realizar una solicitud ajax a una api JSON en otro subdominio (api.u413.com). Cuando inspecciono las solicitudes en las herramientas de desarrollo de Chrome y Firefox Firebug, parece que Access-Control-Allowed-Origin
evitando mis solicitudes. Configuré document.domain
con un sufijo del dominio actual: document.domain = ''u413.com'';
.
Aquí está mi petición:
$.ajax({
dataType: ''json'',
data: { parseAsHtml: true, cli: ''help'' },
url: ''http://api.u413.com/'',
success: function (response) {
alert(response.Command);
}
});
Si modifico la solicitud ajax para que esté en el mismo dominio, entonces la solicitud es exitosa.
$.ajax({
dataType: ''json'',
crossDomain: false,
data: { parseAsHtml: true, cli: ''help'' },
url: ''http://dev.u413.com/'',
success: function (response) {
alert(response.Command);
}
});
¿Por qué pasó esto? El navegador no debe quejarse de problemas entre dominios, ya que configuro document.domain
con un sufijo común de ambos subdominios según las pautas de la misma política de origen .
Tengo la aplicación trabajando con jsonp actualmente, pero creo que las solicitudes de ajax correctas deberían funcionar según la misma política de origen que he vinculado anteriormente. Prefiero no usar jsonp si no tengo que hacerlo. ¿No es posible realizar solicitudes regulares de ajax en subdominios?
La misma política de origen es uno de los temas relacionados con el navegador más frustrantes con los que he tenido que lidiar. Es una tontería para mí que 2 servidores en el mismo dominio no puedan comunicarse. Desafortunadamente, la misma política de origen considera incluso 2 solicitudes al mismo servidor, pero en un puerto diferente es una violación de la misma política de origen. Creo que esto mejorará con los futuros navegadores:
http://www.html5rocks.com/en/tutorials/file/xhr2/
búsqueda de: Intercambio de recursos de origen cruzado (CORS)
Básicamente, su servidor solo tiene que establecer un encabezado de respuesta que diga "sí, está bien permitir llamadas de dominio cruzado o cruzadas de subdominio al servidor xyz".
Pasará algún tiempo antes de que todos los navegadores lo admitan. Estoy seguro (y qué demonios tengo que admitir ie8 hasta que la mayoría de nuestros usuarios lo dejen de todos modos), pero al menos hay luz al final del túnel.
document.domain = ''u413.com
agregar document.domain = ''u413.com
a su otro subdominio también.
document.domain
no funciona con AJAX. Está destinado a la comunicación de iframe y ventana entre dominios. En su caso, está violando la misma política de origen ( última línea de la tabla), por lo que necesita usar JSONP o el puente del lado del servidor.
Aquí hay una guía muy buena que ilustra diferentes técnicas para lograr solicitudes AJAX entre dominios.