我是一个新手,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