Ich habe ein seltsames Problem mit AngularJS und einem REST-Webservice. Dies ist mein Code:
$http.delete(appSettings['baseUrl'] + 'pricelistitem/' + article.itemNumber + '/' + article.acc)
.error(function(e) {
console.log(e);
});
Wenn dieser Aufruf, ich erhalte eine Fehlermeldung und die .error
ausgeführt wird, aber das e
Objekt ist null
.
in der Konsole, erhalte ich diese Fehlermeldung:
XMLHttpRequest cannot load <url>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5000' is therefore not allowed access.
Wenn in Postbote (das gleiche, das durch meinen Code aufgerufen wird), um die DELETE-Anforderung zu tun, ich bin diese Header in der reponse bekommen :
Access-Control-Allow-Methods → GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin → *
Content-Length → 2
Content-Type → application/json
Date → Fri, 29 May 2015 06:26:00 GMT
X-Powered-By → IBM i
Ich würde sagen, diese Header sind korrekt und ich sollte diesen Fehler nicht erhalten. Selbst wenn ich das tat, ist das Fehlerobjekt null und zeigt mir so überhaupt keine Informationen.
UPDATE 15/06: Dieses Problem tritt auf, wenn Sie versuchen, PUT und DELETE zu verwenden. POST und GET funktioniert gut. Auf der Registerkarte Netzwerk der Chrome-Entwicklungstools kann ich nur eine OPTIONS-Anfrage sehen. In dieser Anfrage ist Access-Control-Allow-Methods
nicht vorhanden (aber es ist in PUT/DELETE, wenn Sie dies in Postman testen), selbst nach der Konfiguration der Apache-Konfiguration, um diesen Header in jede Antwort aufzunehmen.
Ich habe stundenlang an diesem Problem ohne Ergebnis gearbeitet.
Was könnte dieses Problem verursachen? Muss die OPTIONS-Anfrage auch den Header Access-Control-Allow-Origin zurückgeben?
Jeder Rat würde sehr geschätzt werden!
Nur von Skripten initiierte Anfragen sind von CORS betroffen. Daher ist das Testen einer DELETE-Anfrage in Postman völlig nutzlos, wenn Sie ein Problem mit CORS haben. Sie müssten die Preflight-Anfrage simulieren. Nehmen Sie die Fehlermeldung ernst und fragen Sie sich, warum der Server keinen Header "Access-Control-Allow-Origin" senden würde. – zeroflagL
Nun, ich habe ehrlich gesagt keine Ahnung. Der Server gibt diese Kopfzeile zurück, unabhängig davon, ob ein Fehler auftritt oder nicht. – Bv202
Das erste mögliche Problem ist, dass der Server diese Kopfzeile bei 'OPTIONS' Anfragen nicht hinzufügt. Ein anderer Grund könnte sein, dass der Header bei Anfragen von 'localhost' nicht hinzugefügt wird oder nur bei Anfragen von bestimmten Hosts hinzugefügt wird.Versuchen Sie, eine 'OPTIONS' Anfrage mit Postman mit dem Header 'Origin: http: // localhost: 5000' zu senden. – zeroflagL