2017-01-25 42 views
6

Wysyłam żądanie GET do mojego lokalnego serwisu, którego oczekuję, że zwrócona zostanie odpowiedź 302 z lokalizacją w nagłówku. Dostaję jednak niezdefiniowaną odpowiedź i błąd sieci, mimo że widzę lokalnie, że żądanie jest obsługiwane, a odpowiedź jest tworzona bez żadnych błędów w usłudze internetowej.302 Błąd odpowiedzi

Próbowałem w Postman i Chrome, i otrzymuje odpowiedź przekierowania i odpowiednio przekierowuje.

Nie jestem pewien, czy to jest problem CORS, a jeśli tak, jak mogę to rozwiązać?

ja już dodane w nagłówku odpowiedzi na CORS filtrować

Access-Control-Expose-Headers: Location, [own headers] 
Access-Control-Allow-Origin: '*' 
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE 
Access-Control-Max-Age: [some age] 
Access-Control-Allow-Headers: [own headers] 

A lokalizacja jest obecny w nagłówku gdy używam Postman

Żądanie robię używając Axios i config jest

const config = { 
    url: [someURL], 
    method: 'GET', 
    headers: { 
    'customHeader':'token', 
    }, 
    params: { 
    [params] 
    }, 
    maxRedirects: 0, 
    validateStatus: status => (status >= 200 && status < 300) || status === 302, 
}; 

Każda pomoc będzie naprawdę zrozumiałe, dlaczego odpowiedź jest niezdefiniowana, gdy osiągnie mój kod JS, ale działa dobrze w Postman i Chrome.

Sposób, w jaki mogę to rozwiązać, to użycie kodu stanu HTTP 200 i uzyskanie nagłówka lokalizacji, aby przekierować, ale chcę tego uniknąć, ponieważ jest to z technicznego punktu widzenia odpowiedź przekierowania.

+0

Możliwe, że możesz spróbować sprawdzić status 'readyState' i wyszukać' HEADERS_RECEIVED' (https://xhr.spec.whatwg.org/). Sprawdź tę odpowiedź http://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest. –

+0

Ale otrzymuję niezdefiniowaną odpowiedź, która nie zawiera żadnego stanu ani treści odpowiedzi ani nagłówków. – diepjy

Odpowiedz

2

Część 'customHeader':'token' części Twojego żądania triggers your browser to first send a CORS preflight OPTIONS request. Dowolne nagłówki dodawane do żądania innego niż nagłówki zdefiniowane jako przeglądarki wyzwalaczy CORS-safelisted request-headers w celu wysłania żądania OPTORS typu CORS.

Powodem, dla którego nie otrzymujesz tego z Listonosza, jest to, że w odróżnieniu od wyszukiwarek, Postman nie implementuje CORS, więc nie wysyła żądania OPTIONS. (Listonosz nie działa w oparciu o ten sam model bezpieczeństwa sieci Web, który przeglądarki wymuszają na aplikacjach internetowych.)

Jeśli serwer nie zareaguje we właściwy sposób na żądania preflightu CORS, twoje żądanie się nie powiedzie i obejście problemu polega na tym, że nie należy dodawać tej części do żądania lub w inny sposób konstruować żądania w dowolny sposób, który spowoduje, że przeglądarka wykona preflight CORS.

+0

Mam inne punkty końcowe, które działają poprawnie (GET, POST, DELETE, PUT i OPTION) z opcjami CORE preflight OPTIONS, z wyjątkiem punktów końcowych, które zwróć odpowiedź 302. Nie jestem pewien, co masz na myśli mówiąc "skonstruuj swoją prośbę w dowolny sposób, który uruchamia przeglądarkę, aby wykonał preflight CORS". Czy to oznacza, że ​​muszę dodać nagłówek lokalizacji do mojego żądania? – diepjy