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

Binance API触发CORS错误的原因及React/Next.js环境下解决方法求助

解决React/Next.js调用Binance K线接口的CORS问题

核心问题根源

你遇到的所有CORS错误,本质是一开始用错了Binance的API域名——Binance公开REST API的正确域名是https://api.binance.com,而非https://binance.com。访问错误域名会触发301重定向,而浏览器的CORS预检请求(OPTIONS)不允许跟随重定向,进而引发后续一系列问题。


分步解决方案

1. 修复基础请求,解决预检重定向错误

直接使用正确的API域名,移除不必要的crossDomain或withCredentials配置(公开接口无需凭证):

useEffect(() => {
  const fetchData = async () => {
    try {
      const { data } = await axios.get('https://api.binance.com/api/v3/klines', {
        params: {
          symbol: 'ETHUSDT',
          interval: '1h',
          startTime: '1514764800000',
        },
      })
      console.log(data)
    } catch (err) {
      console.error(err)
    }
  }
  fetchData()
}, [])

2. 为什么withCredentials: true会报错?

Binance公开接口的响应头中,Access-Control-Allow-Origin值为通配符*。当请求设置withCredentials: true时,浏览器会强制要求Origin不能是通配符,因此触发错误。公开接口完全不需要携带凭证(Cookie等),直接删除这个配置即可。

3. 修正Next.js代理配置,解决通配符Origin错误

如果需要通过代理转发请求(比如统一域名、隐藏真实API地址),按以下方式配置:

修正后的next.config.js:

/** @type {import('next').NextConfig} */
const nextConfig = {
  async rewrites() {
    return [
      {
        source: '/api/binance/:path*',
        destination: 'https://api.binance.com/api/v3/:path*',
      },
    ]
  },
}

module.exports = nextConfig

前端代理请求代码:

useEffect(() => {
  const fetchData = async () => {
    try {
      const { data } = await axios.get('/api/binance/klines', {
        params: {
          symbol: 'ETHUSDT',
          interval: '1h',
          startTime: '1514764800000',
        },
      })
      console.log(data)
    } catch (err) {
      console.error(err)
    }
  }
  fetchData()
}, [])

说明:代理后前端请求的是同源路径(自己域名下的/api/binance/klines),Next.js自动转发到Binance的正确API地址,浏览器不会触发CORS检查,同时避免了凭证模式的限制。


内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:55:24