2017-06-12 7 views
1

Ich habe ein API-Gateway installiert, dass ich versuche, gegen zu programmieren. Anfragen funktionieren bei der Verwendung von Apps wie Postman, aber wenn ich versuche, eine Verbindung über Code in Form von XMLHTTPRequests herzustellen, bekomme ich 401 ... No 'Access-Control-Allow-Origin' header is present on the requested resource., dass der Server keine Cross-Site-Anrufe zulässt.Confusion über REST-API-Aufrufe

Vielleicht verstehe ich nicht ganz, wie das funktioniert, aber es scheint, dass Apps wie Postman dies irgendwie umgehen. Wenn ich versuche, von einer lokalen Datei in meinem Browser auf die API zuzugreifen, stoße ich auf dieses Problem. Muss ich die Webseite, von der aus ich anrufe, hosten, damit dies funktioniert? Oder verpasse ich hier etwas anderes?

+0

Haben Sie Fiddler keine Unterschiede in der Arbeits- und Mittag Arbeitsdurchlaufen, um zu bestimmen versucht? oder suchte nach dem header im ausgehenden Postboten? – vipersassassin

+0

Werfen Sie einen Blick hier https://enable-cors.org/index.html – Kostis

+0

@vipersassassin Es scheint keine GET-Anfrage in den Code gesendet wurde. Das ist seltsam. – Jesper

Antwort

0

Wenn der Browser eine XMLHTTPRequest ausgibt, überprüft es, ob der Ursprung (d. H. Die Domäne) dieser Anforderung vom Endpunkt zum Senden von Anforderungen zugelassen ist. Die Prüfung erfolgt durch eine Preflight-Anfrage, d. H. Eine HTTP OPTIONS Anfrage, die eine Antwort liefern sollte, die einen Access-Control-Allow-Origin Header mit der Domäne enthält, die die Anfrage erzeugt (oder *, um alle Domains zuzulassen).

Da dies eine Sicherheitsmaßnahme des Browsers ist, hauptsächlich aufgrund der Tatsache, dass der Benutzer beim Durchsuchen von Webseiten möglicherweise nicht weiß, welche Anfragen an welche Endpunkte gesendet werden, muss Postman diese nicht einfach anwenden, da seine Anfragen explizit gesendet werden vom Benutzer selbst.