当前位置: 首页 > 面试题库 >

Angular 2中的访问控制允许起源问题

羊舌源
2023-03-14
问题内容

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

客户端是:

    public getTestLines() : Observable<TestLine[]> {
    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://本地主机:3000
‘因此不允许访问。”

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


问题答案:

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请求。



 类似资料:
  • 问题内容: 我尝试使用以下代码通过$ http(角度)发送http请求: 但这不起作用,并且我在Web控制台中有此错误: 你有解决方案吗 ? 问题答案: 您看到此错误是由于在浏览器中实现的称为Same Origin Policy的安全机制所致。 基本上,这是由于您的网页尝试访问驻留在与网页本身不同的主机,端口或方案(HTTP / HTTPS /文件等)所在的服务器上的资源而引起的。 为了解决此问题

  • 我正在创建一个脚本,加载在其他网站的外部。它加载CSS和HTML,在我自己的服务器上工作得很好。 但还是不管用。

  • 我有错误: XMLHttpRequest 无法加载 http://localhost:5984/cp_config/。当凭据标志为 true 时,不能在“访问控制-允许-源”标头中使用通配符“*”。因此,不允许访问源“http://localhost”。XMLHttpRequest 的凭据模式由 withCredentials 属性控制。 但我有一个标题: 我该如何解决这个问题?

  • 问题内容: 我正在使用以下脚本- 我尝试访问的计算机正在运行播放框架。我收到以下错误: 选项404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我已经难过了两天,有人可以帮我吗? 提前谢谢 问题答案: 问题是您正在尝试进行跨域调用(从到)。Same Origin Policy 不允许这样做,因此浏览器试图使用跨域资源

  • 你有解决办法吗?

  • 我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php: