Ich bin ein Anfänger zu Angularjs verwenden, und ich versuche, einige Header auf eine Anfrage hinzuzufügen:einen benutzerdefinierten Header zu HTTP-Anforderung Hinzufügen Angularjs
var config = {headers: {
'Authorization': 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==',
'Accept': 'application/json;odata=verbose'
}
};
$http.get('https://www.example.com/ApplicationData.svc/Malls(1)/Retailers', config).success(successCallback).error(errorCallback);
ich alle Unterlagen haben gesucht , und das scheint mir, als ob es richtig sein sollte.
Wenn ich eine lokale Datei für die URL in der $http.get
verwenden, sehe ich die folgende HTTP-Anforderung auf dem Netzwerk-Registerkarte in Chrome:
GET /app/data/offers.json HTTP/1.1
Host: www.example.com
Connection: keep-alive
Cache-Control: max-age=0
If-None-Match: "0f0abc9026855b5938797878a03e6889"
Authorization: Basic Y2hhZHN0b25lbWFuOkNoYW5nZV9tZQ==
Accept: application/json;odata=verbose
X-Requested-With: XMLHttpRequest
If-Modified-Since: Sun, 24 Mar 2013 15:58:55 GMT
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
X-Testing: Testing
Referer: http://www.example.com/app/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Wie Sie sehen können, beide der Header wurden korrekt hinzugefügt. Aber wenn ich die URL der in der $http.get
oben gezeigt ein ändern (außer die reale Adresse, nicht example.com), dann bekomme ich:
OPTIONS /ApplicationData.svc/Malls(1) HTTP/1.1
Host: www.datahost.net
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://mpon.site44.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Access-Control-Request-Headers: accept, origin, x-requested-with, authorization, x-testing
Accept: */*
Referer: http://mpon.site44.com/app/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Der einzige Unterschied im Code zwischen diesen beiden ist ein für Die erste URL ist eine lokale Datei und für die zweite ist die URL ein Remote-Server. Wenn Sie sich den zweiten Anforderungsheader ansehen, gibt es keinen Authentifizierungsheader, und Accept
scheint einen Standard anstelle des angegebenen zu verwenden. Auch die erste Zeile sagt jetzt OPTIONS
statt GET
(obwohl Access-Control-Request-Method
ist GET
).
Haben Sie eine Idee, was mit dem obigen Code falsch ist, oder wie Sie die zusätzlichen Header erhalten, wenn Sie keine lokale Datei als Datenquelle verwenden?
Dieses wie ein CORS Problem sieht - nehmen eine längere Hintergrund durch diese Diskussion lesen : https://groups.google.com/forum/#!topic/angular/CSBMY6oXfqs –
Es war in der Tat ein CORS-Problem. Der Server wurde nicht konfiguriert, um den Access-Control-Allow-Origin: -Header zurückzugeben. Wenn Sie eine Antwort mit Ihrem Kommentar und ein bisschen Detail auf CORS schreiben möchten, werde ich Ihre Antwort akzeptieren. Die Antwort unten von Dmitry Evseev und bearbeitet von Ihnen war knapp, aber nicht wirklich das eigentliche Problem. – trentclowater
Chrome überprüft die Anforderung, nach CORS-Headern zu suchen, wenn die Anforderung eine Cross-Domain ist. Überprüfe meine Antwort. –