CORS 和 same-origin 策略请求 React 捆绑应用程序中的问题
CORS and same-origin policies request problems in a react bundled app
好吧,我正在尝试部署与 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
但我在分别的顺序中得到了这两个错误:
same-origin 在生产中启用
cors 在生产中启用
之前的一些声明:
- 是的,API 应用程序和捆绑包由同一个 server/machine 提供服务。
是的,我们在服务器上配置了 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'
- 是的,我知道请求源 URL 在
same-origin
策略中不相等,但是启用 cors
它也会爆炸并且 http://data.blabla
是来自直接服务器的url....我只是不知道该怎么做。
有什么想法吗?我(悲伤地)在这上面停留了几个小时。
在服务器端访问 localhost
没有问题,因为它将指向同一台服务器。但是,如果您尝试在客户端执行此操作,http://localhost
将 指向同一个客户端 。如果浏览器中的 Javascript 运行 正在请求来自 http://localhost
的内容,那么您正在尝试与浏览器的计算机而不是网络应用程序的主机对话。
我什至没有想到你没有意识到这一点。
当您说 API 在 localhost
上时,我假设此应用程序将仅在已经拥有 API 服务器 运行 的客户端上使用在他们。
如果外面的人要使用这个应用程序,API 也必须公开。如果你想隐藏你的不安全 API,你必须实现一个暴露但安全的中间 API。或者,您知道,保护实际的 API :)
好吧,我正在尝试部署与 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
但我在分别的顺序中得到了这两个错误:
same-origin 在生产中启用
cors 在生产中启用
之前的一些声明:
- 是的,API 应用程序和捆绑包由同一个 server/machine 提供服务。
是的,我们在服务器上配置了 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'
- 是的,我知道请求源 URL 在
same-origin
策略中不相等,但是启用cors
它也会爆炸并且http://data.blabla
是来自直接服务器的url....我只是不知道该怎么做。
有什么想法吗?我(悲伤地)在这上面停留了几个小时。
在服务器端访问 localhost
没有问题,因为它将指向同一台服务器。但是,如果您尝试在客户端执行此操作,http://localhost
将 指向同一个客户端 。如果浏览器中的 Javascript 运行 正在请求来自 http://localhost
的内容,那么您正在尝试与浏览器的计算机而不是网络应用程序的主机对话。
我什至没有想到你没有意识到这一点。
当您说 API 在 localhost
上时,我假设此应用程序将仅在已经拥有 API 服务器 运行 的客户端上使用在他们。
如果外面的人要使用这个应用程序,API 也必须公开。如果你想隐藏你的不安全 API,你必须实现一个暴露但安全的中间 API。或者,您知道,保护实际的 API :)