Acceso denegado en IE 10 y 11 cuando el destino ajax es localhost


Estoy tratando de hacer una llamada ajax entre un servidor (http) que está en Internet. Y dirígelo a mi propio host local. FF / Chrome / ETC... obrar. Es SÓLO un problema de IE. IM USANDO IE 11 Y 10.

La solicitud ni siquiera se hace. El" acceso denegado " se lanza al instante.

Este es el código. Sólo para que lo veas.

No es el error HTTP/HTTPS clásico en IE8 E IE9. Esto es otra cosa, pero la documentación no es útil.

$jq.ajax({
            contentType: 'application/json',
            url: url,
            dataType: 'json',
            crossDomain: true,
            beforeSend: function (xhr) {
                xhr.withCredentials = true; 
                xhr.setRequestHeader("Authorization", "Basic " + $jq.base64.encode(username and password));
            },
            success: function (data, status, headers) {},
            error: function (xhr, status, error) {}

El estado es 0 en xhr objeto y error es "Acceso denegado"

Author: Nilesh Thakkar, 2014-02-28

5 answers

Internet Explorer genera este error como parte de su característica de zonas de seguridad. Usando la configuración de seguridad predeterminada, se genera un error de " Acceso denegado "cuando se intenta acceder a un recurso en la zona de" Intranet local "desde un origen en la zona de" Internet".

Si estuviera escribiendo su código Ajax manualmente, Internet Explorer generaría un error al intentar abrir el recurso. Por ejemplo:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost/', true); // This line will trigger an error
xhr.send();

Puede solucionar este error agregando el sitio de origen a los " Sitios de confianza" zona de seguridad. Puedes probar esto añadiendo "http://client.cors-api.appspot.com" a su zona de "Sitios de confianza" y usando esta página de prueba en test-cors.org con su sitio localhost como URL remota.

 41
Author: oobug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 21:35:20

Además del requisito de sitio de confianza, encontré que el problema no se solucionó hasta que usé el mismo protocolo para la solicitud que mi origen, por ejemplo, mi sitio de prueba estaba alojado en https pero falló con cualquier destino que usara http (sin la s).

Esto solo se aplica a IE, Chrome solo educadamente registra una advertencia en la consola de depuración y no falla.

 15
Author: Martin Laukkanen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-02 14:26:39

Si está intentando hacer peticiones ajax de origen cruzado en IE9, necesitará usar XDomainRequest en lugar de XMLHttpRequest. Hay un complemento de jQuery que envuelve XDR. Debe tener en cuenta que hay algunas limitaciones notables de XDR.

Otra opción sería usar una biblioteca como esta: https://github.com/jpillora/xdomain .

 3
Author: Ray Nicholus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-30 14:03:38

JQuery implementa llamadas ajax usando el objeto XMLHttpRequest que no es compatible con IE9. Tienes que forzarlo a usar XDomainRequest en su lugar.

Soluciono este problema usando este plugin de jQuery:

Https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

 2
Author: Jamie Holdstock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-03 22:19:26

Nota:

No use " http://www.dominio.xxx " o " http://localhost/" o "IP" para URL en Ajax. Solo use ruta (directorio)y nombre de página sin dirección.

Estado Falso:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir/getSecurityCode.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

Estado verdadero:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'dir/getSecurityCode.php', true);   // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);



function createAjax()
{
    var ajaxHttp = null;
    try
    {
        if(typeof ActiveXObject == 'function')
            ajaxHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else 
        if(window.XMLHttpRequest)
            ajaxHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        alert(e.message);
        return null;
    }
    //-------------
    return ajaxHttp;
};
 -5
Author: ali bagheri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-14 07:57:26