跨域 ajax 错误,因为 Vagrant 设置中的端口不同

Cross domain ajax errors because of different ports in Vagrant setup

本文关键字:设置 错误 ajax 因为 Vagrant 跨域      更新时间:2023-09-26

我正在用这个设置开发一个 Web 应用程序:

Production:
  frontend.myapp.com
  appserver.myapp.com
  auth.myapp.com
Development:
  localhost:8080 (frontend)
  localhost.com:3010 (appserver)
  localhost.com:3011 (auth)

Frontend是一个与nginx一起服务的angularjs SPA。Appserver 是一个公开 apis(用户、项目、订单等)的 rails 应用程序。Auth 是另一个使用 omniauth 处理身份验证的 rails 应用程序。

在生产中,我们使用不同的子域作为虚拟主机。在开发中,我们使用不同的端口(因为在流浪中更容易配置)。

一切正常,除了一件事:角度应用程序(前端)有时需要向身份验证服务器发出 ajax 请求,这被认为是跨域攻击,因为前端端口是 8080,身份验证端口是 3011。这个问题在生产中不存在,因为我们使用子域。

如何防止跨域错误?


一种解决方法是在开发中使用子域。(例如,在我的主机文件中:

10.2.0.15 frontend-local.myapp.com
10.2.0.15 appserver-local.myapp.com
10.2.0.15 auth-local.myapp.com

(10.2.0.15 是我的流浪机器 IP)

我喜欢这个修复程序,因为我的本地设置更像是生产设置(使用子域而不是端口)。

但是在流浪汉重新加载后,我的访客 (lucid32) 机器的 ip 会发生变化,我需要再次编辑我的主机文件......

而且我还没有找到一种方法来告诉流浪汉分配一个静态 IP......

有什么建议吗?

访问不同的端口违反了同源策略,这就是它不起作用的原因。您可以使用 JSONp 请求,但在生产中不需要它们。如果将访问控制允许源设置为允许本地计算机上的每个域,该怎么办?那么它至少应该在现代浏览器中工作。

您在设置主机文件方面走在正确的轨道上。

让Vagrant为机器分配一个静态ip非常容易,试试这个:

config.vm.network :private_network, ip: "10.2.0.15"