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

React无API权限时如何解决RapidAPI的CORS跨域问题?

解决RapidAPI分页请求的CORS错误问题

核心问题原因

你在请求头里加access-control-allow-origin: *完全没用——这个头是服务器返回给浏览器的响应头,不是前端请求时发送的。浏览器的CORS校验是检查服务器返回的响应中是否包含允许你当前域名(http://localhost:3002)的Access-Control-Allow-Origin头,和你请求里带的这个头无关。

另外,你直接用响应里返回的https://api.hybridgfx.com域名发起请求,这个是目标API的原始域名,对方服务器没有配置CORS允许你的前端域名;而浏览器直接访问该URL时,不属于跨域请求(是直接在地址栏访问,没有从其他域名的页面发起),所以不会触发CORS校验,能正常拿到数据。

解决方案

  • 必须通过RapidAPI的代理域名发起请求
    你的请求头里已经指定了X-RapidAPI-Host: countries-states-cities-dataset.p.rapidapi.com,这才是RapidAPI提供的代理域名,所有请求(包括分页请求)都要通过这个域名发起,不能用响应里返回的原始域名。你需要解析响应中的分页URL,把域名替换为RapidAPI的代理域名。

  • 删除无效的请求头
    去掉请求配置里的"access-control-allow-origin": "*",这个头对解决CORS问题没有任何帮助。

修改后的完整代码

const fetchNextResults = async (url: string): Promise<FetchResponse> => {
  const options = {
    method: "GET",
    url: url,
    headers: {
      "X-RapidAPI-Key": MyKey,
      "X-RapidAPI-Host": "countries-states-cities-dataset.p.rapidapi.com",
      // 已删除无效的access-control-allow-origin头
    },
  };
  
  try {
    const response = await axios.request(options);
    console.log(response.data);
    
    // 处理分页URL(如果响应中包含下一页地址)
    if (response.data.next_page_url) {
      const correctedNextUrl = response.data.next_page_url.replace(
        "https://api.hybridgfx.com",
        "https://countries-states-cities-dataset.p.rapidapi.com"
      );
      // 可将correctedNextUrl保存,用于发起下一页请求
      console.log("下一页请求URL:", correctedNextUrl);
    }
    
    return response.data;
  } catch (error) {
    console.error(error);
    throw error; // 建议抛出错误让调用方处理,避免返回undefined
  }
};

额外说明

RapidAPI的核心作用之一就是作为代理,帮开发者处理跨域、API密钥管理等问题,所以所有请求都必须走他们的代理域名,不能直接访问目标API的原始地址。只要坚持用RapidAPI的Host域名发起请求,就能避免CORS错误。

内容的提问来源于stack exchange,提问作者Amos Machora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:31:23