it-swarm.com.de

Angular POST Ursprungsfehler überqueren, während POSTMAN arbeitet

Ich versuche von meinem Angular-Login-Service aus, POST zu senden:

$http.post('https://xyz/login',
            {
                headers: {
                    'Content-type': 'application/json',
                    'Accept': 'application/json',
                    'signature': 'asd'
                }

Und ich bekomme diesen Fehler:

XMLHttpRequest cannot load https://xyz/login. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.

Ich habe diese Header ausprobiert:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

Und auch diese:

"Access-Control-Allow-Origin": "*";
"Access-Control-Allow-Headers": "X-Requested-With";
"Access-Control-Allow-Methods": "GET, POST", "PUT", "DELETE";

Das Interessante ist, dass der POSTMAN funktioniert. Was muss ich tun?

Vielen Dank.

10
user3712353

Ihre Anfrage enthält nicht einfache Header Content-type und signature, die im Access-Control-Allow-Headers-Header der Antwort enthalten sein müssen.

(Content-type ist manchmal ein einfacher Header, aber nur für bestimmte Werte. application/json ist keiner dieser Werte, und Content-type wird dadurch nicht mehr einfach.)

Fügen Sie Content-type zu Access-Control-Allow-Headers in der Preflight-Antwort Ihres Servers hinzu.

POSTMAN ist nicht an dieselbe Origin-Richtlinie gebunden, sodass keine CORS-Unterstützung vom Server erforderlich ist.

6
apsillers

Macht Ihr Browser eine OPTIONEN-Anfrage vor dem POST? Überprüfen Sie die Registerkarte NET. Ich hatte zuvor Probleme, bei denen eine OPTIONS-Anfrage vom Browser oder Angular (weiß nicht, welche) gestellt wurde und der Server keine hatte.

"Zugriffskontroll-Zulassungsmethoden": "GET, POST", "PUT", "DELETE", "OPTIONS";

2
danday74

Nicht sicher, ob Sie bereits die benötigten Informationen haben. Aber in meinem lokalen Webserver - wenn ich eine http-Anfrage mit dem Postboten mache, fügt er dem Header Folgendes hinzu:

header: {Host: 'localhost', Verbindung: 'keep-alive', Pragma: 'no-cache', 'cache-control': 'no-cache', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/47.0.2526.106 Safari/537.36 ', akzeptieren:'/', verweisen:' http: // localhost/ ', 'accept-encoding': 'gzip, deflate, sdch', 'accept-language': 'en-US, en; q = 0.8'},

Und hier ist, was ich in den rawHeaders sehe: ['Host', 'localhost', 'Connection', 'keep-alive', 'Pragma', 'no-cache', 'Cache-Control', 'no-cache' , 'User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/47.0.2526.106 Safari/537.36', 'Accept', '/' , 'Referer', ' http: // localhost/ ', 'Accept-Encoding', 'gzip, deflate, sdch', 'Accept-Language', 'en-US, en; q = 0.8'] ,

Vielleicht müssen Sie Ihren Client nur vortäuschen, um ein anerkannter Browser-Client zu sein.

0
Tim