2012-03-14 23 views
9

Zawsze, gdy tworzę żądanie jQuery.ajax, działa poprawnie, gdy adres URL korzysta z protokołu HTTP. Ale kiedy wyślę to samo żądanie do serwera HTTPs, zostanie wysłane bez nagłówka [HTTP_X_REQUESTED_WITH: XMLHttpRequest]. W ten sposób serwer nie ma możliwości dowiedzenia się, że jest to żądanie AJAX!jQuery.ajax nie wysyła odpowiednich nagłówków ajax podczas korzystania z HTTPS

Próbowałem:

  • Przełączanie $ .ajax, $ .post, $ .get
  • Zmuszanie nagłówek używając beforeSend
  • Ustawianie CrossDomain:true

Uwaga: Nie nie są problemami z wieloma domenami, żądanie jest poprawne i obsługiwane, ale nie jako AJAX.

Ten problem występuje, gdy bieżący adres URL to http, ale żądany adres URL znajduje się w tej samej domenie, ale korzysta z protokołu HTTPS. http://example.com/home użyje AJAX POST odpowiedzieć na

+5

To ** jest ** problemem między domenami AFAIK. [SPO] (http://en.wikipedia.org/wiki/Same_origin_policy) wymaga, aby żądania dotyczyły tego samego protokołu i portu (gdzie - jak używasz HTTP -> HTTPS i 80 -> 443). Wydawałoby się (bez żadnych dodatkowych informacji), że jQuery * robi * żądanie JSONP za kulisami, które ignoruje dodatkowe nagłówki HTTP. – Matt

+0

Masz na myśli, kiedy jesteś na serwerze HTTP i wysyłasz żądanie ajax do serwera HTTPS, prawda? –

+0

@MikeGleasonjrCouturier, tak jest. – mjalajel

Odpowiedz

3

Mam ten sam problem przy wykonywaniu tych samych czynności między http i https.
Sprawdziłem to i jest to problem z wieloma domenami. Proszę spróbuj JSONP z funkcją oddzwaniania do robienia rzeczy, a najważniejszą rzeczą na stronie serwera, której używasz do robienia curl, jest ustawienie nagłówków zezwalających na połączenie http do https. Poniżej znajdują się:

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

Proszę zwrócić większą uwagę na formatowanie, nie formatuj całego wpisu jako bloku kodu. –

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

    ... 
    ... 
} 

Nadziei ten pomaga: D

5

Próbowałem podejście Kiśor, ale nagłówek nie wysłany. Zmodyfikowałem go, ustawiając nagłówek w ten sposób:

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

Używam jQuery 1.8.2.

Powiązane problemy