Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular 2 JSONP请求中未发送授权标头_Javascript_Angular_Typescript_Cors_Jsonp - Fatal编程技术网

Javascript 在Angular 2 JSONP请求中未发送授权标头

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

我正在进行JSONP调用,需要在授权标头中传递承载令牌。但是,尽管在我的代码中添加了头,但授权头并没有添加到请求中(请在Fiddler中进行检查)。该代码利用Angular 2和TypeScript。这是我的密码-

    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,我确实看到了飞行前的选项,但我认为我的令牌有问题同样。我会发回并接受答案,但这是一个很好的基础介绍!