【问题标题】:Localhost call from Angular http$ only works locally in W2k8 R2来自 Angular http$ 的本地主机调用仅在 W2k8 R2 中本地工作
【发布时间】:2016-11-06 14:37:12
【问题描述】:

我正在尝试在 Windows 2008 R2(别怪我)上部署 Angular 前端,它在同一台服务器上调用 JAVA REST,但端口不同。如果我从服务器浏览,一切正常,但如果我从另一台计算机尝试,则一切正常。

发生的情况是 Angular 尝试使用 localhost 从客户端计算机而不是服务器调用服务器。 如果我将 localhost 替换为服务器的 IP 地址,它可以在我网络内的另一台计算机上运行,​​但不能从外部运行。

这不是 CORS 或防火墙(关闭)的问题,我已经尝试弄乱主机文件,尝试使用 IIS 和 nginx。

我的问题是:-如何强制对 localhost 的请求“停留”在服务器而不是客户端??

【问题讨论】:

  • 也许我不太明白,但你不能。在客户端进行角度运行。如果您的 REST api 在线,它应该可以从任何地方访问。你必须让它从你的网络外部工作。我认为这是服务器问题,而不是角度
  • serverfault.com 上提问可能会更好,因为这是一个网络问题
  • 您好,感谢您的光临!我实际上认为在某处有一些配置可以改变这种行为,就像我们在 Java 中可以做的那样......你看,我是前端开发的新手,因为我目前只是一个后端开发人员。

标签: angularjs iis nginx localhost


【解决方案1】:

如果您试图让应用程序调用本地 api(仅对服务器可见),则无法通过 Angular 应用程序来实现。 Angular 在您的浏览器中运行,因此当您打开网页时,应用程序开始在您的浏览器中运行,这意味着您提供给应用程序的上下文必须是完全公开的,并且可能通过令牌访问或类似的方式进行门控。

如果您无法公开该 java REST 服务以便应用程序可以从任何地方调用它,我想您可以解决此问题的唯一方法是拥有另一个公开的服务,由您的 Angular 应用程序调用,并调用此 java REST 端点。

作为一般经验法则,您应该记住,您可以从浏览器查看的任何应用程序 - 如果它们是使用异步 JavaScript 库编码的,例如 angular/reach/knout 等。基本上是公开的,因此服务调用他们所做的可以被追踪,因为服务器端呈现的网页(asp.net MVC / JSP with Java)可以进行服务器调用而客户端不会看到。

【讨论】:

  • 嘿,感谢您的帮助和澄清!我以为我可以从 angular 调用在 localhost 中运行的服务...将我们公共 ip 中的端口映射到为 angular 应用程序提供服务的同一服务器似乎很奇怪,因为正如您所说,可以在本地进行来自 Java Web 应用程序的调用...我正在开始学习完整的堆栈/微服务,所以我必须习惯这种特定的前端配置...我会将您的答案标记为正确!!!再次感谢!!!
猜你喜欢
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2013-11-15
  • 2014-07-25
相关资源
最近更新 更多