【问题标题】:CORS and same-origin policies request problems in a react bundled app响应捆绑应用程序中的 CORS 和同源策略请求问题
【发布时间】:2017-07-21 11:38:35
【问题描述】:

好吧,我试图部署一个与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,但我分别按顺序收到这两个错误:

  • 在生产中启用同源

  • 在生产中启用了 cors

之前的一些声明:

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

    @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....我只是不不知道该怎么办。

有什么想法吗?我(可悲地)有几个小时被困在这上面。

【问题讨论】:

  • request mode is "same origin" but ... - 那么如果请求实际上是跨域的,为什么请求模式是同源的呢?为什么“生产模式”使用localhost?该应用程序是否包含网络服务器?
  • 好吧,我说我尝试了same-origin(第一张图片)然后cross-origin(第二张图片)。
  • 抱歉,您这样做了... 什么 在这种情况下,这个“本地主机”是什么?您提到“应用程序”,所以我对您对“本地主机”的期望感到困惑
  • @Nano 很抱歉,same-origin 问题再明显不过了:它是同一个来源,正如错误消息中明确指出的那样。如果应用程序和 API 都由同一服务器提供服务,那么当 API url 硬编码为 localhost... 时,为什么还要访问 data.cult... 来查看应用程序?
  • 所以,有一个公共 dns:xxx.xxxx.com,应用程序就在那里,然后在同一个服务器中,我们想通过 localhost 访问 API(所以它不需要在外面打开),这就是问题所在。在这两种情况下(cors 和同源)通过 url 访问它时它可以工作,但是当尝试通过 localhost 访问它时它不会。

标签: javascript cors same-origin-policy


【解决方案1】:

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

当你说 API 在 localhost 上时,我假设这个应用程序只会在已经运行 API 服务器的客户端上使用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2019-08-26
    • 2021-05-05
    • 2020-06-27
    • 2020-08-15
    • 2021-02-18
    • 2019-04-07
    相关资源
    最近更新 更多