从React(同构应用程序)进行API调用时出现“Access-Control-Allow-Origin”问题

我遇到了使用React和Express的同构JavaScript应用程序的问题。

我正在尝试使用axios.get在组件装入时发出HTTP请求

componentDidMount() { const url = 'http://ufc-data-api.ufc.com/api/v3/iphone/fighters/title_holders'; axios.get(url).then( res => { //use res to update current state }) } 

我从API获取状态200 res,但我没有得到任何响应数据,并在我的控制台中得到一个错误

 XMLHttpRequest cannot load http://ufc-data-api.ufc.com/api/v3/iphone/fighters/title_holders. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. 

但是,如果我在我的server.js中发出请求

 const url = 'http://ufc-data-api.ufc.com/api/v3/iphone/fighters/title_holders'; axios.get(url).then(res => { //console.log(res); }); 

它工作正常,我得到服务器启动时的响应数据。 这是一个与实际的API问题,或者我做错了什么? 如果这是一个CORS问题,我猜在server.js中的请求也不会工作吗? 谢谢!

CORS是一个浏览器function。 服务器需要joinCORS以允许浏览器绕过同源策略。 您的服务器不会有相同的限制,并能够使用公共API向任何服务器发出请求。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

在启用CORS的服务器上创build一个端点,该端点可以充当您的Web应用程序的代理。

使用谷歌浏览器扩展名为允许控制允许来源:* 。 它在应用程序中随时修改CORS头文件。

我想你的问题的答案在这里

要让Chrome在标头中发送Access-Control-Allow-Origin,只需将/ etc / hosts文件中的本地主机别名到其他域,如:

127.0.0.1 localhost yourdomain.com

因为服务器没有CORS头,所以你不能得到响应。

这是我从Chrome浏览器捕获的API头文件:

 Age:28 Cache-Control:max-age=3600, public Connection:keep-alive Date:Fri, 06 Jan 2017 02:05:33 GMT ETag:"18303ae5d3714f8f1fbcb2c8e6499190" Server:Cowboy Status:200 OK Via:1.1 vegur, 1.1 e01a35c1b8f382e5c0a399f1741255fd.cloudfront.net (CloudFront) X-Amz-Cf-Id:GH6w6y_P5ht7AqAD3SnlK39EJ0PpnignqSI3o5Fsbi9PKHEFNMA0yw== X-Cache:Hit from cloudfront X-Content-Type-Options:nosniff X-Frame-Options:SAMEORIGIN X-Request-Id:b971e55f-b43d-43ce-8d4f-aa9d39830629 X-Runtime:0.014042 X-Ua-Compatible:chrome=1 X-Xss-Protection:1; mode=block 

响应头中没有CORS头。