【发布时间】:2017-07-21 11:38:35
【问题描述】:
好吧,我试图部署一个与webpack 和create-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,但我分别按顺序收到这两个错误:
之前的一些声明:
- 是的,API 应用程序和捆绑包由同一台服务器/机器提供服务。
-
是的,我们在服务器上配置了 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' - 是的,我知道请求源 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