You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用react-axios请求GraphQL接口遭遇CORS错误求助

解决React-Axios调用GraphQL接口的CORS问题

错误原因分析

你在请求头中设置Access-Control-Allow-Origin: *是无效的——这个响应头只能由服务器端返回,用来告知浏览器允许跨域请求,客户端添加该请求头无法解决CORS限制。

另外你的GraphQL请求格式也存在问题:POST请求的GraphQL查询需要包装在JSON对象的query字段中,而非直接传递字符串。

解决方案

方案一:修正请求配置(优先尝试)

调整请求格式,去掉无效的请求头,按GraphQL规范发送请求:

const characterQuery = `{
    characters(page: 2, filter: { name: "rick" }) {
      info {
        count
      }
      results {
        name
        status
        species
        gender
        image
      }
    }
  }`

const axiosInstance = axios.create({
  headers: {
    "Content-Type": "application/json" // 配置正确的请求头
  }
})

<AxiosProvider instance={axiosInstance}>
  <Post 
    url="https://rickandmortyapi.com/graphql"
    data={{ query: characterQuery }} // 将查询包装在JSON对象中
  >
    {(response: any) => {
      console.log(response);
    }}
  </Post>
</AxiosProvider>

方案二:React开发环境代理(若方案一无效)

在项目的package.json中添加代理配置,让React开发服务器帮你转发请求绕过CORS:

"proxy": "https://rickandmortyapi.com"

然后修改请求URL为相对路径:

<Post url="/graphql" data={{ query: characterQuery }}>
  {(response: any) => {
    console.log(response);
  }}
</Post>

方案三:自定义代理中间件(复杂场景)

如果需要更灵活的代理规则,安装http-proxy-middleware:

npm install http-proxy-middleware --save-dev

在src/setupProxy.js中添加配置:

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/graphql',
    createProxyMiddleware({
      target: 'https://rickandmortyapi.com',
      changeOrigin: true,
    })
  );
};

之后同样使用相对路径/graphql发起请求即可。

注:Rick and Morty的GraphQL API本身支持CORS,优先尝试方案一即可解决问题。

内容的提问来源于stack exchange,提问作者Luca Natale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:06:37