Mam skrypt uruchomiony na stronie internetowej, która musi używać metody JQuery $ .ajax (obecnie używa jquery 1.7.2) przesłać kilka żądań GET do punktu końcowego usługi w innej domenie. Mam wywołanie ajax działające w IE (9, 10, 11), ale kończy się niepowodzeniem z 401 nieautoryzowaną odpowiedzią w Firefoksie i Chrome. Częścią dodatkowego komunikatu o błędzie w Chrome jest "Pełne uwierzytelnienie jest wymagane, aby uzyskać dostęp do tego zasobu".
Moje ajax wywołanie jest ustawiony tak (dataType jest „json” dla tych wniosków, które nie, i asynchroniczny jest prawdą):
$.ajax({
url: url,
type: "GET",
async: isAsync,
dataType: dataType,
username: user,
password: pswd,
success: function (response, status) {
// success code here
},
failure: function (response, status) {
// failure code here
},
complete: function (xhr, status) {
// on complete code here
}
});
jestem przekazując nazwę użytkownika i hasło wymagane do uzyskania dostępu do usługi i działa to w IE. Rozumiem, że funkcja ajax JQuery poprawnie obsłuży uwierzytelnianie, więc jeśli pojawi się odpowiedź wskazująca, że autoryzacja jest wymagana, użyłaby poświadczeń, które zostały dostarczone, aby poprawnie wykonać to żądanie. Czy coś mi umyka? Czy muszę ręcznie dodać nagłówek autoryzacji, aby działało?
UPDATE: Oto wniosek, odpowiedzi i informacji Cookie zgłoszone przez Chrome i IE za pomocą narzędzi debugowania F12 (kilka informacji zastąpione [... usuniętej ...])
Chrome (42,0 .2311.90 m)
nagłówki odpowiedzi
access-control-allow-poświadczenia: pochodzenie kontroli dostępu, umożliwiający- prawdziwe: [... usunięte ...] kontroli dostępu, wystawiać -hea ders: kontrola pamięci podręcznej: prywatna, max-age = 0, konieczne ponowne potwierdzenie połączenia: keep-alive kodowanie treści: długość zawartości gzip: 296 typ treści: text/html; charset = ISO-8859-1 data: wt., 21 kwietnia 2015 r. 20:55:12 GMT wygaśnie: wtorek, 21 kwietnia 2015 20:55:12 GMT p3p: CP = "Non DSP COR CURa PSAa PSDa NASZE NOR BUS PUR COM NAV STA" zestaw- Cookie: JSESSIONID = QD-app-1348vf1vrksvc76oshcwirvjp.qd-app-13; path = /; Bezpieczne; HttpOnly set-Cookie:! NSC_vt1.sbmmzefw.dpn - IUUQT = ffffffff09091c3945525d5f4f58455e445a4a42378b; path = /; zabezpieczyć; HttpOnly cywilny: 401 Nieautoryzowane zmieniają się: Zaakceptuj-Kodowanie: HTTP/1.1 www-authenticate: Basic realm = "Rally ALM"
Żądanie Główki
: host: rally1.rallydev.com: Metoda: GET: ścieżka [... usunięte ...] : Schemat: https: Wersja: HTTP/1.1 zaakceptować: application/json, tekst/javascript, /; q = 0.01 accept-encoding: gzip, deflate, sdch accept-language: en-US, en; q = 0.8 origin: [... removed ...] referer: [... removed ...] user -agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537,36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537,36
Cookies Response
JSESSIONID QD-app-1348vf1vrksvc76oshcwirvjp.qd -app-13 NSC_vt1.sbmmzefw.dpn! -!IUUQT ffffffff09091c3945525d5f4f58455e445a4a42378b
IE 11
Żądanie Główki
żądanie GET [... usunięte ...] Referer [... usunięte ...] Zebrane
aplikację/json, tekst/javascript, /; q = 0.01 Accept-Language pl-US Zaakceptuj kodowanie gzip, deflate User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv: 11.0) jak host Gecko [... usunięty ...] Connection Keep-Alive Cache-Control no-cache Cookie
JSESSIONID = qd-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-08; NSC_vt1.sbmmzefw.dpn! -! IUUQT = ffffffff09091c3145525d5f4f58455e445a4a42378b; RALLY-Detail-treeCollapsed = false; ZSESSIONID = RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU; SUBBUCKETID = 713nagłówki odpowiedzi
HTTP Response/1.1 200 OK RallyRequestID QD-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-0810353108 Wygasa Thu, 01 stycznia 1970 00:00:00 GMT Content-Type text/javascript; charset = UTF-8 ETag "0101c2c8d3463ee3c1a4f950d4142b7d3" P3P CP = "NON DSP COR Cura PsaA PSDa NASZ NOR BUS PUR COM NAV STA" Cache-Control prywatne, max-age = 0, must-revalidate Data Tue, 21 kwietnia 2015 20:58:17 GMT połączenia keep-alive Set-Cookie ZSESSIONID = RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU; Path = /; Domain = [... usunięte ...]; Bezpieczne; HttpOnly Set-Cookie SUBBUCKETID = 713; Path =/; Domain = [... usunięte ...]; bezpieczni; HttpOnly Content-Length 319
Cookies
Wysłane JSESSIONID QD-app-08xmftgye78tde1b0wzcl2kit4m.qd-app-08
Wysłane NSC_vt1.sbmmzefw.dpn -! IUUQT ffffffff09091c3145525d5f4f58455e445a4a42378b Wysłane RALLY-Detail-treeCollapsed fałszywe Wysłane ZSESSIONID RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU Wysłane SUBBUCKETID 713 Received ZSESSIONID RpKo5acfRqmjPhW0vIU1rgurWmDhlka0lrGCY9MIWhU Pod koniec sesji [... usunięte ...]/Tak Tak Otrzymane SUBBUCKETID 713 na koniec sesji [... usunięte ...]/Tak
Czy próbowałeś debugowania za pomocą narzędzi programistycznych w chrome lub firefox? – brso05
Sprawdź ruch sieciowy i zobacz, jaki typ żądania i odpowiedzi otrzymujesz, analizując żądanie i odpowiedź, aby sprawdzić, czy coś wygląda inaczej niż np. – brso05
'401' jest zwykle zwracany przez serwer. Czy uwierzytelniasz się w zdalnej domenie (używając plików cookie, uwierzytelniania HTTP lub w inny sposób?). Twoja przeglądarka może nie wysyłać wymaganego uwierzytelnienia we wszystkich przypadkach. – arcyqwerty