2015-07-09 11 views
6

Dies ist eine ähnliche Frage zu diesem post in SO. Aber die hier angegebene Antwort kann nicht in meinem Fall angewendet werden, da ich die Antwortheader vom Server nicht ändern kann.

Angenommen, ein HTTP POST zu einem anderen Ursprung. Dies beinhaltet CORS, einschließlich eines CORS-Preflight-Austauschs. Angenommen, die OPTIONS-Anfrage gibt aufgrund eines Serverproblems einen Fehler zurück. In diesem Fall gibt der Error-Handler "" für Daten und 0 für den Status statt geben Sie mir den Statuscode 503 und den Text: service not available. Ein Beispiel für dieses Szenario ist im folgenden Bild dargestellt.

enter image description here

enter image description here

Ich verwende AngularJS $ http und ich weiß, dass in der Antwort keine CORS-Header sind, wenn solche Fehler happen.and ich es nicht ändern kann.

Gibt es eine Möglichkeit, dass ich den richtigen Fehlercode und den Text in meinem Ablehnungsobjekt erhalten kann.

+0

Ich frage vielleicht das Offensichtliche, aber wenn Sie den Server nicht ändern können und Sie wissen, dass es keine CORS-Header hat, warum würden Sie dann überhaupt versuchen, eine Cross-Site-Anfrage zu machen? – Claies

+0

@Claies danke für Ihre Zeit! Der Server sendet CORS-Header für alle erfolgreichen Anfragen. Aber wenn ein Fehler wie "503-service unavailable" passiert, sendet er einfach keine CORS-Header, über die ich keine Kontrolle habe. –

+0

hmm Ich bin noch nie auf solche Probleme gestoßen, aber ich werde ein wenig nachforschen und sehen, was ich ausgraben kann. – Claies

Antwort

9

Dies ist kein Problem von AngularJS/$ http, sondern das Verhalten der Browser und ihres XMLHttpRequest-Objekts: Wenn die CORS-Anfrage fehlschlägt, gibt der Browser dem Anrufer keine Informationen zurück.

Bevor ich dieses Verständnis bekam, war es auch ein AngularJS-Problem und ich habe ein offenes Thema auf github von Angular -> mit dem entsprechenden Kommentar angesprochen.

https://github.com/angular/angular.js/issues/13085#issuecomment-148047721

Also ich denke, es gibt keine andere Art und Weise scheint dies zu lösen, wie die Access-Control-Allow-Origin Antwort-Header auch auf dem Proxy/Load Balancer bei 503.

bearbeiten hinzuzufügen: Wenn Ihr Load Balancer ist ein HAproxy, der folgende kann Ihnen auch helfen:
HAproxy: different 503 errorfile for OPTIONS and POST methods
Es zeigt, wie HAproxy die CORS-Anfragen autonom anwerben lassen.