当前位置:  开发笔记 > 编程语言 > 正文

访问控制允许Angular 2中的原始问题

如何解决《访问控制允许Angular2中的原始问题》经验,为你挑选了1个好方法。

我从node.js服务器获取数据时遇到问题.

客户端是:

    public getTestLines() : Observable {
    let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
    let options = new RequestOptions({ headers: headers });

    return this.http.get('http://localhost:3003/get_testlines', options)
                .map((res:Response) => res.json())
                .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 
}

在服务器端我也设置了标题:

resp.setHeader('Access-Control-Allow-Origin','*') 
resp.send(JSON.stringify(results))

但是我收到了一个错误

"XMLHttpRequest无法加载http:// localhost:3003/get_testlines.对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头.来源' http://因此不允许localhost:3000 '访问."

我该如何解决?当我删除标题时,它表示此标题是必需的.



1> Quentin..:

Access-Control-Allow-Origin响应标头,而不是请求标头.

您需要让它出现在响应中,而不是请求中.

您试图将其置于响应中:

resp.setHeader('Access-Control-Allow-Origin','*') 

......但它没有奏效.

这可能是因为您没有将其放在对正确请求的响应上.错误消息说:

预检请求的响应未通过访问控制检查

您已完成某些操作以使请求成为预检.这意味着在浏览器发出您正在尝试的GET请求之前,它正在发出OPTIONS请求.

据推测,这可能是由您服务器上的不同代码处理的,因此该行resp.setHeader('Access-Control-Allow-Origin','*')未被命中.

导致预检请求的一件事是添加请求标头(除了少量例外).添加Access-Control-Allow-Origin请求将触发预检请求,因此尝试解决问题的第一件事是从请求中删除Access-Control-Allow-Origin.

如果失败,那么您需要设置服务器,以便它可以响应OPTIONS请求以及GET请求.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有