2017-01-25 3 views
6

Ich mache eine GET-Anfrage an meine lokalen Webservice, die ich erwarte eine 302 Antwort mit einer Position in der Kopfzeile zurückgegeben werden. Allerdings bekomme ich eine undefinierte Antwort zurück und einen Netzwerkfehler, obwohl ich lokal sehen kann, dass die Anfrage bedient wird und die Antwort ohne Fehler im Webservice erstellt wird.302 Antwort Fehler

Ich habe in Postman und Chrome versucht, und es erhält die Umleitung Antwort und leitet entsprechend um.

Ich bin mir nicht sicher, ob das ein CORS-Problem ist und wenn ja, wie kann ich das lösen?

habe ich bereits hinzugefügt in den Antwort-Header für CORS

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] 

Filter und die Lage ist in der Kopfzeile, wenn ich Postman verwenden

Die Anfrage Ich mache mit Axios und die config

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

Jede Hilfe wäre wirklich zu schätzen, warum die Antwort ist nicht definiert, wenn es meinen JS-Code erreicht, sondern arbeitet in Postman und Chrome in Ordnung.

Eine Möglichkeit, dies zu lösen, ist HTTP-Statuscode 200 zu verwenden und den Standortheader umzuleiten, aber ich möchte dies vermeiden, weil es technisch eine Weiterleitungsantwort ist.

+0

Möglicherweise können Sie versuchen, 'readyState' Status zu überprüfen und suchen nach' HEADERS_RECEIVED' (https://xhr.spec.whatwg.org/). Überprüfen Sie diese http://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest Antwort auch. –

+0

Aber ich bekomme eine undefinierte Antwort, die keinen Status oder Response Body oder Header enthält – diepjy

Antwort

2

Der 'customHeader':'token' Teil Ihrer Anfrage triggers your browser to first send a CORS preflight OPTIONS request. Beliebige Kopfzeilen, die Sie zu einer anderen Anfrage als den als CORS-safelisted request-headers definierten Headern hinzufügen, veranlassen Browser zum Senden einer CORS Preflight OPTIONS-Anfrage.

Der Grund, warum Sie dies nicht von Postman bekommen, ist, dass Postman im Gegensatz zu Browser-Engines keine CORS implementiert, also sendet es die OPTIONS-Anfrage nicht. (Postman arbeitet nicht unter demselben Websparmodell, das Browser für Webanwendungen erzwingen.)

Wenn der Server nicht richtig auf CORS Preflight OPTIONS-Anfragen reagiert, wird Ihre Anfrage fehlschlagen und die einzige Problemumgehung besteht darin, den Teil 'customHeader':'token' nicht zu Ihrer Anfrage hinzuzufügen oder Ihre Anfrage auf andere Weise so zu konstruieren, dass Ihr Browser die CORS-Preflight-Funktion ausführt.

+0

Ich habe andere Endpunkte, die gut funktionieren (GET, POST, DELETE, PUT und OPTION) mit CORS Preflight OPTIONS Anfragen, mit Ausnahme von Endpunkten gib eine 302 Antwort zurück. Ich bin mir nicht sicher, was Sie meinen, indem Sie "Ihre Anfrage auf irgendeine Weise konstruieren, die Ihren Browser dazu bringt, CORS-Preflight auszuführen" bedeutet, dass ich den Standort-Header zu meiner Anfrage hinzufügen muss? – diepjy