2016-11-28 3 views
7

Response from serverZugriff auf benutzerdefinierte HTTP-Response-Header in AngularJS

Ich versuche, den Header 'Fehler-Detail' zugreifen, wie Sie im Browser Netzwerk Inspektor (Link oben) sehen kann, wird der Header zurückgegeben. Server-weise habe ich auch den benutzerdefinierten Header zu den 'Access-Control-Expose-Headern' hinzugefügt, um Domain-übergreifende Anfragen zu erlauben, da dies vorgeschlagen wurde, um andere Fragen zu beheben.

Unten ist die Anfrage an den Server zusammen mit dem Erfolg/Fehler Rückrufe.

this.signon = function (request, onComplete, onError) { 
    console.log("Calling server with 'login' request..."); 

    return $http.post("http://localhost:8080/markit-war/services/rest/UserService/login/", request) 
     .then(onComplete, onError); 
}; 

var onLookupComplete = function(response) { 
    if (response.data.username) 
    { 
     //If user is returned, redirect to the dashboard. 
     $location.path('/dashboard'); 
    } 

    $scope.username = response.data.username; 
}; 

var onError = function(response) { 
    $scope.error = "Ooops, something went wrong.."; 
    console.log('error-detail: ' + response.headers('error-detail')); 
}; 

Wenn ich versuche, die Antwort-Header zugreifen, wie unten zu sehen:

console.log(response.headers()); 
    console.log('error-detail: ' + response.headers('error-detail')); 

dies nur Ausgänge: content-type: "application/json" Fehler-Detail: null

Ist gibt es einen Grund, warum der Fehler-Detail-Header nicht auf das Antwortobjekt abgebildet wird?

+0

können Sie tun response.headers(). Fehler-Detail? – user2085143

+0

@ user2085143 Nein, sicherlich ist das keine legale Syntax, oder? –

+0

Wahrscheinlich nicht, aber nicht sicher, was response.headers() tatsächlich zurückgibt. Haben Sie einen Blick auf diese http://stackoverflow.com/questions/220231/accessing-the-web-pages-http-headers-in-javascript – user2085143

Antwort

8

Ich denke, Sie sind auf dem richtigen Weg. Um Zugriff auf benutzerdefinierte Header zu haben, muss Ihr Server diesen speziellen Header Access-Control-Expose-Headers setzen, andernfalls wird Ihr Browser nur den Zugriff auf 6 vordefinierte Header-Werte zulassen, die in Mozilla docs aufgelistet sind.

In Ihrem Screenshot ist eine solche Kopfzeile nicht in der Antwort vorhanden. Sie sollten sich das Backend ansehen, damit dieser Corse-Header auch in der Antwort vorhanden ist.

5

Dies ist eine CORS Ausgabe. Da dies eine Cross-Origin-Anfrage ist, versteckt der Browser die meisten Header. Der Server muss in seiner Antwort einen Header Access-Control-Expose-Headers enthalten.

Der Antwortkopf Access-Control-Expose-Headers1 zeigt an, welche Header als Teil der Antwort verfügbar gemacht werden können, indem ihre Namen aufgelistet werden.

standardmäßig nur die 6 einfachen Antwort-Header ausgesetzt sind:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Verfällt
  • Last-Modified
  • Pragma

Wenn Sie möchten, dass Clients auf andere Header zugreifen können, müssen Sie sie mit dem Header Access-Control-Expose-Headers auflisten.

Weitere Informationen finden Sie MDN HTTP Header -- Access-Control-Expose-Headers

Verwandte Themen