2012-03-14 14 views
9

Cada vez que creo una solicitud jQuery.ajax, funciona bien cuando la URL usa el protocolo HTTP. Pero cuando envío la misma solicitud al servidor HTTPs, se envía sin el encabezado [HTTP_X_REQUESTED_WITH: XMLHttpRequest]. Por lo tanto, el servidor no tiene forma de saber que esta es una solicitud de AJAX.jQuery.ajax no envía los encabezados ajax apropiados al usar HTTPS

He intentado:

  • conmutación .ajax $, $ .post, $ .get
  • Forzar el encabezado utilizando beforeSend
  • Configuración CrossDomain:true

Nota: No no hay problemas entre dominios, la solicitud es válida y se maneja, pero no como AJAX.

Este problema ocurre cuando la URL actual es http pero la URL solicitada se encuentra en el mismo dominio pero usa HTTPS. http://example.com/home utilizará AJAX puesto en puesto a

+5

Este ** es ** un problema entre dominios AFAIK. [SOP] (http://en.wikipedia.org/wiki/Same_origin_policy) requiere que las solicitudes estén en el mismo protocolo y puerto (donde, como está usando HTTP -> HTTPS y 80 -> 443). Al parecer (sin más información), jQuery * está * haciendo una solicitud JSONP detrás de las escenas, que ignora los encabezados HTTP adicionales. – Matt

+0

¿Quiere decir cuando se encuentra en el servidor HTTP y hacer una solicitud de ajax al servidor HTTPS, verdad? –

+0

@MikeGleasonjrCouturier yest, este es el caso. – mjalajel

Respuesta

3

Tengo el mismo problema para hacer lo mismo entre http y https.
He investigado esto y es un problema de dominio cruzado. Intente con JSONP con la función de devolución de llamada para hacer las cosas, y lo más importante es que la página del lado del servidor que está utilizando para hacer curl tenga que establecer algunos encabezados para permitir la conexión http a https. Estos son los siguientes:

header("Access-Control-Allow-Origin: your https url"); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Max-Age: 1728000"); 

header("Access-Control-Allow-Headers: Content-Type, Connection, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
header("Connection: close");  
+0

Preste más atención a su formato, no formatee toda su publicación como bloque de código. –

1
$.ajax { 
    ... 
    ... 
    beforeSend : function(jqXHR, settings) { 
        jqXHR.setRequestHeader("HTTP_X_REQUESTED_WITH", "XmlHttpRequest" 
       } 

    ... 
    ... 
} 

Hope éste ayuda: D

5

Probé el enfoque de Kishor, pero la cabecera no recibió enviado. He modificado, indicando en la cabecera de esta manera:

$.ajax { 
    beforeSend: function(jqXHR, settings) { 
    jqXHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
    }, 
    ... 
}; 

estoy usando jQuery 1.8.2.

Cuestiones relacionadas