CORS 和 same-origin 策略请求 React 捆绑应用程序中的问题

CORS and same-origin policies request problems in a react bundled app

好吧,我正在尝试部署与 webpackcreate-react-app 捆绑在一起的应用程序,这里的理论很简单:

我在某些事情上使用了环境变量,但简而言之,在 development 中,我们使用 http://theapp.app.com/api/v3/endpoint 之类的 URL,并且它有效。

production模式下(yarn build),URL是http://localhost/api/v3/endpoint,有独特的变化。

无论如何,我正在使用 fetch API 来发出我的请求,并且我正在使用获取配置的 mode。对于 development,它是 mode: 'cors',因为服务器不在我的本地机器上,而且运行良好。

production 标志的情况下,我尝试使用 mode: 'same-origin'cors 但我在分别的顺序中得到了这两个错误:

之前的一些声明:

  1. 是的,API 应用程序和捆绑包由同一个 server/machine 提供服务。
  2. 是的,我们在服务器上配置了 CORS(我们正在使用 python bottle):

    @app.hook('after_request') def enable_cors(): response.headers['Access-Control-Allow-Origin'] = '*' response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS'

  3. 是的,我知道请求源 URL 在 same-origin 策略中不相等,但是启用 cors 它也会爆炸并且 http://data.blabla是来自直接服务器的url....我只是不知道该怎么做。

有什么想法吗?我(悲伤地)在这上面停留了几个小时。

在服务器端访问 localhost 没有问题,因为它将指向同一台服务器。但是,如果您尝试在客户端执行此操作,http://localhost 指向同一个客户端 。如果浏览器中的 Javascript 运行 正在请求来自 http://localhost 的内容,那么您正在尝试与浏览器的计算机而不是网络应用程序的主机对话。 我什至没有想到你没有意识到这一点。

当您说 API 在 localhost 上时,我假设此应用程序将仅在已经拥有 API 服务器 运行 的客户端上使用在他们。

如果外面的人要使用这个应用程序,API 也必须公开。如果你想隐藏你的不安全 API,你必须实现一个暴露但安全的中间 API。或者,您知道,保护实际的 API :)