【发布时间】:2017-06-27 13:09:38
【问题描述】:
在我们公司的 VPN 中,我可以在 FF 和 Chrome 上调用 Web 服务(这是一个 REST 服务)。我需要从 Angular 2 连接到它。现在,我尝试以多种方式从 Angular 2 调用 REST 服务(位于 VPN 内部),但我总是收到有关 CORS 的消息(“请求的请求中不存在‘Access-Control-Allow-Origin’标头资源。因此,不允许访问源“http://localhost:4200”。响应的 HTTP 状态代码为 401。”在 Chrome 中和“跨源请求被阻止:同源策略不允许读取位于 http://webwassvc-test.servizi.gr-u.it/essigEAIM/rest/monitoring/integrations/all?pag=1 的远程资源。(原因: CORS 标头 'Access-Control-Allow-Origin' 缺失)。”在 Firefox 中)。我尝试将 about:config:security.fileuri.strict_origin_policy 设置为 false,但没有帮助。 REST 服务器端的 sysadmin 告诉我他为 CORS(跨域)调用打开了服务器,所以我认为问题出在我端,但我不知道会是什么。有什么建议吗?
更新:我可以通过 PHP 作为中间件 (localhost/angular2_site/file.php) 访问 REST 服务并从中获取数据,但不能直接从 angular (localhost:4200) 获取数据。
【问题讨论】:
-
尝试在请求的头部添加Access-Control-Allow-Origin
-
您需要在您的 http 页面上有一个 Content Security Policy 元标记,并且您需要设置一个“Access-Control-Allow-Origin”标头。这两个你都有吗?
-
在你的 REST api 中,响应头应该有 Access-Control-Allow-Origin:localhost:4200
-
好像是REST服务器的系统管理员搞错了。如果该服务器实际上是为 CORS 调用打开的,它将发送一个
Access-Control-Allow-Origin响应标头。但它没有发送该标头。您无法通过 JavaScript 代码在客户端解决这个问题。 -
@VladimirDespotovic 这不正常,但我想这取决于 REST 服务器的具体配置方式。它可能以某种方式将
http://localhost列入安全名单,但http://localhost:4200却没有。或者可以想象,它可能被配置为不将Access-Control-Allow-Origin响应标头发送到非端口 80 源(不知道为什么有人会这样配置,但谁知道呢)。