/ / Prečo zlyháva moja presmerovaná požiadavka CORS? - angularjs, cors

Prečo zlyhá moja presmerovaná žiadosť o CORS? - angularjs, cors

Môj problém je s volaním angularjs $ http na mojej aplikácii bežiacej na localhost: 8080

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

Prvá požiadavka bola úspešná, Chrome zaznamenal nasledujúcu odpoveď:

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

Výsledkom je, že prehliadač zadá druhú požiadavku GET do umiestnenia presmerovania:

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

Táto druhá žiadosť zlyhá, pretože v prehliadači Chrome bola nahlásená nasledujúca chyba:

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.

Mám teda požiadavku CORS od pôvodu na adresu URL, ktorá umožňuje presmerovanie požiadavky na inú adresu URL, ktorá je tiež nakonfigurovaná na povolenie žiadosti. Ale požiadavka na presmerovanie zlyháva. Mám očakávať, že to bude fungovať?

Upozorňujeme, že adresy api.acme.com a login.acme.com sú nakonfigurované tak, aby umožňovali použitie všetkých pôvodov

Access-Control-Allow-Origin: *

odpovede:

2 pre odpoveď č. 1

Problém spôsobilo nastavenie prehľadávačaPôvod bude nulový, keď sa 302 vráti z požiadavky XHR. Okrem toho sa mi to zdá čudné, pretože by určite malo zmysel, keby bola 302 s pôvodným pôvodom, nie s nulou.

Keď Origin null dorazil na náš server, bola tam implementovaná apache Tomcat CORS (http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter, tomcat 7.0.52) nevráti hlavičku Access-Control-Allow-Origin, aj keď je server nakonfigurovaný tak, aby umožňoval VŠETKY pôvody. Pozn .: Toto správanie je teraz v aktuálnej verzii Tomcat 7 opravené.

Riešením bolo použitie inej implementácie CORS na serveri (http://software.dzhuvinov.com/cors-filter.html). Tento filter vracia Access-Control-Allow-Origin: null a 302 XHR je úspešný.

Aj keď som našiel riešenie, stále som si istý z dvoch vecí:

  1. prečo prehliadač odošle Origin null, keď je výsledkom XHR presmerovanie
  2. či Tomcat filter alebo dzhuvinov softvérový filter správne reaguje na Origin null.

1 pre odpoveď č. 2

pozri krok 6 tejto časti (7.1.7): http://www.w3.org/TR/cors/#redirect-steps

viac diskusií nájdete tu: https://code.google.com/p/chromium/issues/detail?id=154967

Konvencia vysielania reťazca „null“, bohužiaľ, vyvoláva dojem, že by mohlo ísť o chybu; Sám som si to myslel, kým som to nevystopoval :)


0 pre odpoveď č. 3

Ak používate LoginRequiredMiddleware, nezabudnite pridať adresu URL do LOGIN_EXEMPT_URLS v settings.py.