【问题标题】:Angular 2 app: "XMLHttpRequest cannot load localhost endpoint"Angular 2 应用程序:“XMLHttpRequest 无法加载 localhost 端点”
【发布时间】:2017-05-24 21:32:19
【问题描述】:

我设置了 Angular 前端以尝试访问 RESTful 端点。 Angular 前端在 localhost:3000 上提供服务,RESTful 后端在 localhost:8080 上提供服务。

在我的 Angular 休息客户端服务中,我拨打电话(我在我的应用程序的其他地方订阅):

getCurrentSlides(): Observable<Slide[]> {
  return this.http.get("localhost:8080/app/slides")
     .map(extractData)
     .catch(handleError);
}

但是当 Angular 尝试访问该 URL 时,我收到以下错误:

XMLHttpRequest cannot load localhost:8080/app/slides. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

是的,我的服务器上启用了 CORS。

【问题讨论】:

标签: rest angular


【解决方案1】:
this.http.get("localhost:8080/app/slides")

您在 URL 中缺少http://。这样一来,大多数浏览器对于不同的端口 but IE does not 仍然需要 CORS,因此在添加 http:// 时,您应该能够使用 IE 进行测试:

IE 异常

Internet Explorer 在同源策略方面有两个主要例外

  • 信任区域:如果两个域都在高度信任区域,例如公司域,则不应用相同的来源限制
  • 端口:IE 不将端口包含在同源组件中,因此http://company.com:81/index.htmlhttp://company.com/index.html 被视为同源并且没有应用限制。

这些例外是非标准的,不受任何其他浏览器的支持,但在为基于 Windows RT(或)IE 的 Web 应用程序开发应用程序时会很有帮助。

也就是说,您应该启用 CORS。 (但似乎你做到了,所以它只是缺少 http:// 前缀。)

【讨论】:

  • @David 将原始问题更改为 Java Spring 问题;我们不是论坛,而是问答,所以请不要这样做。
  • 我明白了 - 我希望 OPTIONS 是我可以在 Angular 项目中配置的东西。如果不是这样,我应该开始一个新问题并关闭这个问题吗?
  • 按照您的建议,我能够在其他地方的 Spring 帖子中找到我的答案。我会将您的回复标记为答案,因为您为我解决了 Angular 的一半难题(我最初认为这是唯一需要解决的难题)。我还删除了这篇文章中对 Spring 的所有引用,因此当人们将来发现它时它会更有用。感谢您的意见。
猜你喜欢
  • 2015-04-15
  • 2019-07-13
  • 1970-01-01
  • 2013-02-09
  • 2015-05-21
  • 1970-01-01
  • 2020-07-23
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多