/ / Dlaczego moje przekierowane żądanie CORS kończy się niepowodzeniem? - angularjs, cors

Dlaczego moje przekierowane żądanie CORS nie działa? - angularjs, cors

Mój problem dotyczy połączenia angularjs $ http z moją aplikacją działającą na localhost: 8080

var url "https://api.acme.com/RX/v1/user";
$http.get(url).success(function (data) {
alert("yay");
$scope.user = data;
});

Pierwsze żądanie kończy się powodzeniem z następującą odpowiedzią zarejestrowaną przez Chrome:

Status Code:302 Found
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:8080
Location:https://login.acme.com/cas/login?service=https%3A%2F%2Fapi.acme.com%2FRX%2Fv1%2Fuser

Powoduje to, że przeglądarka wysyła drugie żądanie GET do lokalizacji przekierowania:

https://login.acme.com/cas/login?service=https%3A%2F%2Fapi.acme.com%2FRX%2Fv1%2Fuser

To drugie żądanie kończy się niepowodzeniem z powodu następującego błędu zgłoszonego w Chrome:

XMLHttpRequest cannot load https://login.acme.com/cas/login?service=https%3A%2F%2Fapi.acme.com%2FRX%2Fv1%2Fuser. No "Access-Control-Allow-Origin" header is present on the requested resource. Origin "null" is therefore not allowed access.

Mam więc prośbę CORS od źródła do adresu URLktóra pozwala przekierowanemu żądaniu na inny adres URL, który jest również skonfigurowany tak, aby zezwolić na żądanie. Ale żądanie przekierowania kończy się niepowodzeniem. Czy powinienem oczekiwać, że to zadziała?

Uwaga: api.acme.com i login.acme.com są skonfigurowane tak, aby zezwalały na używanie wszystkich źródeł

Access-Control-Allow-Origin: *

Odpowiedzi:

2 dla odpowiedzi № 1

Problem był spowodowany ustawieniem przeglądarki przezZaczyna się od zera, gdy 302 wraca z żądania XHR. Nawiasem mówiąc, wydaje mi się to dziwne, ponieważ z pewnością sensowniej byłoby uczynić 302 z oryginalnym Origin, a nie zerowym.

Kiedy na naszym serwerze pojawiła się wartość null Origin, tam implementacja CORS apache tomcat (http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter, tomcat 7.0.52) nie zwraca nagłówka Access-Control-Allow-Origin, nawet jeśli serwer jest skonfigurowany tak, aby zezwalał na WSZYSTKIE źródła. Uwaga: To zachowanie jest teraz naprawione w bieżącej wersji Tomcat 7.

Rozwiązaniem było użycie innej implementacji CORS na serwerze (http://software.dzhuvinov.com/cors-filter.html). Ten filtr zwraca Access-Control-Allow-Origin: null i 302 XHR się udaje.

Chociaż znalazłem rozwiązanie, wciąż nie jestem pewien dwóch rzeczy:

  1. dlaczego przeglądarka wysyła Origin do wartości zerowej, gdy XHR powoduje przekierowanie
  2. czy filtr tomcat lub filtr oprogramowania dzhuvinov poprawnie reaguje na wartość początkową null.

1 dla odpowiedzi nr 2

patrz krok 6 w tej sekcji (7.1.7): http://www.w3.org/TR/cors/#redirect-steps

więcej dyskusji można znaleźć tutaj: https://code.google.com/p/chromium/issues/detail?id=154967

Niestety konwencja przekazywania ciągu „null” sprawia wrażenie, jakby to był błąd; Tak myślałem, dopóki tego nie wyśledziłem :)


0 dla odpowiedzi № 3

jeśli używasz LoginRequiredMiddleware, dodaj adres URL do LOGIN_EXEMPT_URLS w settings.py.