CORS在使用localhost:3000以不同URL访问GraphQLAPI时出现问题

CORS在使用localhost:3000以不同URL访问GraphQLAPI时出现问题,cors,graphql,create-react-app,react-apollo,apollo-client,Cors,Graphql,Create React App,React Apollo,Apollo Client,我搜索了StackOverflow的所有地方,发现了类似的问题,但没有找到有效的解决方案。想知道是否有人有有效的解决方案?我正在localhost:3000上开发一个createreact应用程序,并试图通过Apollo客户端访问另一个站点上的URI(我正在测试) 我已经将fetchOptions模式“no cors”添加到新的Apollo客户端实例中,但我的控制台中仍然出现cors错误。我的enitre index.js文件如下: import React from 'react'; impo

我搜索了StackOverflow的所有地方,发现了类似的问题,但没有找到有效的解决方案。想知道是否有人有有效的解决方案?我正在localhost:3000上开发一个createreact应用程序,并试图通过Apollo客户端访问另一个站点上的URI(我正在测试)

我已经将fetchOptions模式“no cors”添加到新的Apollo客户端实例中,但我的控制台中仍然出现cors错误。我的enitre index.js文件如下:

import React from 'react';
import ReactDOM from 'react-dom';

import { ApolloProvider } from 'react-apollo';
import { ApolloClient, HttpLink, InMemoryCache } from 'apollo-boost';

import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';


const client = new ApolloClient({
    link: new HttpLink({ uri: 'https://developer.github.com/v4/explorer/' }),
    fetchOptions: {
        mode: 'no-cors',
      },
    cache: new InMemoryCache()
  });

  const AppWithProvider = () => (
    <ApolloProvider client={client}>
      <App />
    </ApolloProvider>
  );
ReactDOM.render(<AppWithProvider />, document.getElementById('root'));


serviceWorker.unregister();
从“React”导入React;
从“react dom”导入react dom;
从'react apollo'导入{ApolloProvider};
从“apollo boost”导入{apollo客户端,HttpLink,InMemoryCache};
导入“./index.css”;
从“./App”导入应用程序;
将*作为serviceWorker从“/serviceWorker”导入;
const客户端=新客户端({
链接:新的HttpLink({uri:'https://developer.github.com/v4/explorer/' }),
获取选项:{
模式:“无cors”,
},
缓存:新的InMemoryCache()
});
常量AppWithProvider=()=>(

“来自来源”已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。如果不透明响应满足您的需要,请将请求的模式设置为“无CORS”,以在禁用CORS的情况下获取资源。

,因为API端点可能会出现这种情况如果在其访问控制中没有“localhost”,则必须在简单和干净的解决方案之间进行选择

<> LI>

简单的解决方案:如果仅仅是为了DEV的目的,您可以考虑从Chrome开始使用“<代码> >禁用Web安全< /COD>标志集.<强>因为这大大降低了安全性,但是,它应该只是开发目的的临时解决方案>/P>

  • < P>干净的解决方案:如果API端点没有<代码>访问控制允许Orth:** <代码>,就没有真正的方法来从浏览器中完全消耗数据。考虑到应用程序的后端将请求发送到API端点,然后将结果提供给您的前端。


  • 您正在进行跨源请求,必须遵守CORS策略。设置
    模式:“无CORS”
    不会神奇地绕过现代web浏览器强制实施的CORS策略。如果
    https://developer.github.com
    未设置
    AccessControl Allow Origin
    标题,则无法向该标题发出跨源请求resource.@JakeHolzinger您的评论对这个问题没有帮助,因为您与Apollo客户端一起使用的任何公共API在localhost开发中都会出现此CORS错误。请尝试使用上面的设置重新创建它,以便您可以看到问题的症结所在。如果您可以提供一个解决方案,而不是使用此Apollo设置,以了解您的操作方式使用任何没有CORS问题的公共API在本地开发,这将更有帮助。由API开发人员选择是否接受跨源请求。我没有一个神奇的解决方案可以让跨源请求适用于每个API。您可以实现自己的API,然后从服务器向github API发出请求,但在浏览器中,您无法决定服务器响应是什么。