Javascript 在Angular 2 JSONP请求中未发送授权标头
我正在进行JSONP调用,需要在授权标头中传递承载令牌。但是,尽管在我的代码中添加了头,但授权头并没有添加到请求中(请在Fiddler中进行检查)。该代码利用Angular 2和TypeScript。这是我的密码-Javascript 在Angular 2 JSONP请求中未发送授权标头,javascript,angular,typescript,cors,jsonp,Javascript,Angular,Typescript,Cors,Jsonp,我正在进行JSONP调用,需要在授权标头中传递承载令牌。但是,尽管在我的代码中添加了头,但授权头并没有添加到请求中(请在Fiddler中进行检查)。该代码利用Angular 2和TypeScript。这是我的密码- let headers = new Headers({ 'Authorization': 'Bearer ' + token }); let options = new RequestOptions({ headers: headers, withCredentia
let headers = new Headers({ 'Authorization': 'Bearer ' + token });
let options = new RequestOptions({ headers: headers, withCredentials: true });
this.url = "http://api.azurewebsites.net/api/search/" + params;
return this.jsonp.request(this.url, options)
.map(this.extractData)
.catch(this.handleErrorObservable);
我这里缺少什么?如果您使用的是JSONP,那么您就不能使用
授权
头来要求授权。相反,除非配置其他授权方式,否则返回JSONP的端点必须响应来自任何地方的请求,而不需要授权
头
无法将授权
头添加到请求中的原因是,如果使用的是JSONP,则无法将任何请求头添加到请求中。这是因为JSONP的工作原理是向文档中添加script
元素,然后将请求URL设置为该script
元素的src
属性的值
因此,您不能将请求头添加到浏览器为该脚本
元素获取URL而发出的请求中,就像您不能为任何其他脚本
元素添加请求头一样
如果您想使用授权
-头请求授权,那么您需要使用普通方法(如XHR或Fetch API)或普通的$http.get(…)
)发出请求
在这种情况下,API端点需要启用完全的CORS支持,包括对浏览器将自动生成的请求头的支持,因为请求中存在
授权请求头。我猜应该是让头=新头({'Authorization','Bearer'+token}
如果我使用逗号而不是冒号,则代码不会生成。将引发一个异常,提示应为“;”。确切地说,应为-TS1005:“:”。{“授权”:“承载者”+令牌}是标准的,应该可以工作。我认为错误是因为您使用的是withCredentials
,并且没有包含凭据的第二个参数。请删除withCredentials
,或者更改为this.jsonp.request(this.url',options)
尝试使用头。追加('Authorization',bearrier'+令牌);
之后declaring@Aravind-我试过了,但行为是一样的,header没有通过Hank You@sideshowbarker,关于JSON的脚本元素和header部分的解释很好。这就清楚了事情是如何工作的!我确实更改了我的代码以使用http.get,我确实看到了飞行前的选项,但我认为我的令牌有问题同样。我会发回并接受答案,但这是一个很好的基础介绍!