Ich sende eine POST-Anfrage an einen Server, den ich besitze und auf den ich zugreifen kann.POST-Anfrage mit Preflight enthält erlaubte Herkunft, aber Fehler, deren Herkunft nicht erlaubt ist
Dies löst eine CORS Preflight-Anfrage mit OPTIONS Methode und gibt die folgende Antwort-Header:
HTTP/1.1 200
Allow: HEAD,POST,GET,OPTIONS
Last-modified: Mon, 26 Jun 2017 13:57:08 BST
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET
Access-Control-Allow-Headers: origin, content-type, accept, authorization
Access-Control-Expose-Headers: Set-Cookie
Content-Type: application/vnd.sun.wadl+xml
Content-Length: 1126
Die nachfolgende POST-Anforderung meldet dann
Fetch API cannot load http://localhost:8080/api/reservation. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 500. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
mit Hilfe von Javascript fetch
.
Wie oben erwähnt, führt ein POST zu meinem /reservation
Endpunkt zu einem solchen Fehler. POST-Anforderungen an andere Endpunkte auf meinem Server sind jedoch erfolgreich und melden nicht, dass der Ursprung nicht zulässig ist. Beide führen denselben fetch
Code aus; Ausgabe von OPTIONS Preflight und dann POST.
var RestRequest = {
post: function(endpoint, payload, callback, secondCallback) {
fetch('http://localhost:8080/api' + endpoint, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
method: 'post',
credentials: 'include',
body: payload
})
.then(function (response) {
return response.json()
})
.then(function (result) {
callback(result)
if (secondCallback != null) {
secondCallback()
}
})
}
};
Warum mein Browser beschwert, dass der Ursprung der die Anfrage keinen Zugriff erlaubt wird, wenn ein CORS Preflight eindeutig Zugang zu diesem speziellen Herkunft erlaubt?
Ändern meiner Server-CORS-Antwortfilter, um alle Ursprünge zuzulassen, führt zu derselben Fehlermeldung. Die gleichen Anfragen vom Postman-Plugin zu erhalten, ist erfolgreich.
Der Statuscode 200 stammt aus der CORS Preflight OPTIONS-Anfrage. – Shiri
Richtig tut mir leid, habe ich nicht bemerkt, aber das Problem ist immer noch das gleiche. Wenn auf Ihrem Server ein Fehler von 500 auftritt, werden die Header nicht gesendet. Das Problem, das Sie haben, ist nicht mit CORS, sondern mit einem anderen Fehler auf Ihrem Server. –
Es gibt keinen Fehler auf dem Server, da die Verwendung von Postman zur Ausgabe der genau gleichen Anfrage erfolgreich ist. Es scheint, als könnte es ein Problem mit javascript 'fetch' api sein, da die Verwendung von' unirest' zur Handhabung der REST-Anfragen ebenfalls erfolgreich ist. Der 500-Code scheint von einer unvollständigen POST-Anforderung zu stammen, was dazu führt, dass der Server nach dem Faktum eine 500 wirft, da er eine Nachricht in der POST-Anfrage erwartet und diese nicht empfangen hat, da der Browser die Prozedur abgebrochen hat t erlaubt. In diesem Fall bin ich nicht sicher, warum irgendeine Art von POST-Anfrage es an den Server geschafft hat, wenn es nicht erlaubt war. – Shiri