使用 localhost:3000 在不同 URL 访问 graphql API 的 CORS 问题

Ela*_*ine 12 cors graphql create-react-app react-apollo apollo-client

我在 StackOverflow 上到处搜索,看到了类似的问题,但没有找到有效的解决方案。想知道是否有人有有效的解决方案?我正在 localhost:3000 上开发一个 create react 应用程序,并尝试通过我的 Apollo Client 访问另一个站点上的 URI(我正在使用https://developer.github.com/v4/explorer/进行测试)。

我已将 'no-cors' 的 fetchOptions 模式添加到我的新 ApolloClient 实例中,但我的控制台中仍然出现 CORS 错误。我的整个 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();
Run Code Online (Sandbox Code Playgroud)

控制台中的错误消息:从源“ http://localhost:3000 ”获取“ https://developer.github.com/v4/explorer/ ”的访问权限已被 CORS 策略阻止:对预检请求的响应没有通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

dan*_* f. 0

由于 API 端点的 Access-Control-Allow-Origin 中可能没有“localhost”,因此您必须在简单和干净的解决方案之间进行选择。

  1. 简单的解决方案:如果只是出于开发目的,您可以考虑使用--disable-web-security设置的标志来启动 Chrome。然而,由于这大大降低了安全性,因此它应该只是出于开发目的的临时解决方案

  2. 干净的解决方案:如果 API 端点没有Access-Control-Allow-Origin: '*',则没有真正的方法可以完全使用浏览器中的数据。考虑让应用程序的后端将请求发送到 API 端点,然后将结果提供给前端。