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

仅Safari出现CORS错误,其他浏览器正常,求解决方案

修复Safari中Fetch API的CORS错误

仅在Safari出现这个跨域错误,核心原因是Safari对跨域请求的校验比其他浏览器更严格,直接在前端调用第三方API容易触发CORS限制。用NextJS的API路由做代理是最可靠的解决方法,步骤如下:

1. 创建NextJS代理API路由

根据你使用的路由方案,选择对应的方式创建路由文件:

若使用Pages Router

在项目根目录的pages/api文件夹下新建random-user.js,写入以下代码:

export default async function handler(req, res) {
  try {
    // 服务器端请求randomuser.me API,不受浏览器CORS限制
    const response = await fetch('https://randomuser.me/api');
    const data = await response.json();
    // 将结果原封不动返回给前端
    res.status(response.status).json(data);
  } catch (err) {
    res.status(500).json({ error: '获取随机用户失败' });
  }
}

若使用App Router

在项目根目录的app/api文件夹下新建random-user文件夹,再创建route.js,写入以下代码:

export async function GET() {
  try {
    const response = await fetch('https://randomuser.me/api');
    const data = await response.json();
    return Response.json(data);
  } catch (err) {
    return Response.json({ error: '获取随机用户失败' }, { status: 500 });
  }
}

2. 修改前端调用代码

把原来直接请求第三方API的代码,改成请求自己的代理路由:

async function getRandomUser() {
  try {
    // 请求同域的API路由,避免跨域问题
    const response = await fetch('/api/random-user');
    const data = await response.json();
    return data.results;
  } catch (err) {
    console.log(err);
  }
}

为什么这个方法有效?

浏览器的CORS限制只针对前端发起的跨域请求,而通过NextJS的API路由发起请求是在服务器端进行的,服务器端请求不受浏览器CORS政策约束。代理路由会把第三方API的结果返回给前端,此时前端请求的是同域地址,自然不会触发CORS错误。

内容的提问来源于stack exchange,提问作者Kentrell Jr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:41