0

Ich versuche, meine eckige App mit Chrome-dev-Konsole zu debuggen. Ich möchte eine Anfrage an einen lokalen Server von eckigen senden. Ich habe folgendes versucht:Wie kann man diese Angular HTTP get Anfrage (mit Basic Authentication) machen?

$http = angular.element($0).injector().get('$http'); 
$base64 = angular.element($0).injector().get('$base64'); 

var auth = $base64.encode("user:passwd"); 
var authHeaders = {"Authorization": "Basic " + auth,"Access-Control-Allow-Origin":"*"}; 

$http.get("url",{headers:authHeaders,method:"GET"}) 

Nach dem Lesen dieser Antwort: https://stackoverflow.com/a/30296149/1496826

Ich dachte, dass benutzerdefinierte Kopf das Problem ist. Also habe ich versucht, in den Körper, um die Genehmigung Header setzen:

$http.get("url",{data: {"Authorization": "Basic " + auth,"Access-Control-Allow-Origin":"*"},method:"GET"}) 

Aber ich bin immer noch die gleichen Fehler:

XMLHttpRequest cannot load "url". No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 401.

Das gleiche Erhaltungs-Anforderungs-Werke aus Postman fein:

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "url", 
    "method": "GET", 
    "headers": { 
    "authorization": "Basic bWdhcasdasd", 
    "cache-control": "no-cache", 
    "postman-token": "XXXXXX-XXXXXX-xXXXX-xXXXX" 
    } 
} 

Ich habe verschiedene andere Varianten wie - $ http Standard/gemeinsame Header usw. versucht, aber alles ist fehlgeschlagen. Bitte helfen Sie.

+0

Haben Sie eine einfache Anfrage ohne Authentifizierung versucht, um zu sehen, ob es funktioniert? Wie: $ http ({Methode: 'GET', URL: '/ SomeUrl' }). Dann (Funktion successCallback (Antwort) { }, Funktion errorCallback (Antwort) {}); – ukn

Antwort

0

Dies ist ein CORS Problem.

CORS-Header müssen serverseitig behandelt werden, ich sehe Ihren serverseitigen Code hier nicht, aber um diesen Fehler verschwinden zu lassen, müssen Sie angeben, welche Domain Ressourcen anfordern darf.

Die Ausnahme wird durch den Browser verursacht, der die Serverantwort abfängt, die Header überprüfen und wenn er den Header Allow-Control-Allow-Origin nicht findet, leitet er die Antwort nicht an Ihren Code weiter (dies geschieht nur für Cross-Ursprungsanforderung).

Deshalb lässt Postman Sie die Antwort sehen, weil es nicht tut, was Chrom tut, macht keine Überprüfung.

Wie ich sagte, die richtige Lösung ist Ihr Server-Seite Code zu beheben und die Allow-Control-Allow-Origin header alternativ eine schnelle, aber vorübergehende Lösung angeben ist this Plugin für Chrome zu installieren, die die Antwort des Servers abfangen wird, und fügen Sie die Allow-Control-Allow-Origin zu * (bedeutet jede Domäne) Dieser Trick täuscht Chrome und lässt Sie die Antwort sehen.

+0

Ich habe keinen Zugriff auf den serverseitigen Code. Es ist eine Django-Anwendung, die von jemand anderem verwaltet wird. Die Plugin-Lösung ist nicht machbar, da ich nicht jeden Benutzer bitten kann, das zu installieren. Bitte schlagen Sie eine Alternative vor, die von der Client-Seite implementiert werden kann. – Mohit

+0

Leider gibt es keine Lösung. Sie müssen sich mit dem Server-Side-Manager in Verbindung setzen und ihn bitten, einen Platzhalter für Ihre Domain in der Kopfzeile hinzuzufügen. Wenn Sie im Internet nach Problemen suchen, die mit Cors zusammenhängen, werden Sie feststellen, dass dieses Thema oft angetroffen wird, aber die Lösung besteht darin, in der Antwort den richtigen Header zu setzen. Dies geschieht nur serverseitig. – Karim