我是一個新手,angular.js,和我想一些頭添加到一個請求:添加自定義頭HTTP請求使用angular.js
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);
我看了所有的文件,這在我看來應該是正確的。
當我使用的URL本地文件在$http.get
,我在Chrome中看到網絡選項卡上的以下HTTP請求:
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
正如你所看到的,標題被正確添加。但是,當我更改URL,以上面的$http.get
所示的(除了使用真實地址,而不是example.com),然後我得到:
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
在代碼中這兩者之間的唯一區別是一個是第一個URL是本地文件,第二個URL是遠程服務器。如果您查看第二個請求標頭,則沒有驗證標頭,並且Accept
似乎使用默認值而不是指定的標頭。此外,第一行現在說OPTIONS
而不是GET
(儘管Access-Control-Request-Method
是GET
)。
任何想法上述代碼有什麼問題,或者如何在不使用本地文件作爲數據源時使用附加頭文件?
這看起來像一個CORS問題 - 需要通過討論一些背景閱讀:https://groups.google.com/forum/#!topic/angular/CSBMY6oXfqs – 2013-03-24 23:23:27
這確實是一個CORS問題。服務器未配置爲返回Access-Control-Allow-Origin:標頭。如果你想寫你的評論和關於CORS的一些細節的答案,我會接受你的答案。 Dmitry Evseev下面的答案和你編輯的答案很接近,但並不是真正的問題。 – trentclowater 2013-03-27 11:38:38
如果請求是跨域,Chrome會預檢查找CORS標頭的請求。檢查我的答案。 – 2016-02-13 05:30:07