Fetch API 默认自动跟随重定向但不暴露过程;需自定义时设 redirect: 'manual',手动解析 Location 头并控制跳转次数与路径记录,注意跨域时 Location 可能被屏蔽,redirect: 'error' 则直接拒绝重定向。

Fetch API 默认会自动跟随重定向(最多 20 次),但不暴露重定向过程,也无法直接控制重定向次数或获取每次跳转的 URL 和状态。若需自定义重定向行为(如限制次数、记录路径、拦截特定跳转),必须禁用自动重定向,手动处理。
禁用自动重定向并手动跟踪
将 redirect: 'manual' 传入 fetch 选项,使响应返回 3xx 状态且 response.redirected === false,同时 headers 中保留 Location 字段。这样你就能完全掌控重定向逻辑。
- 每次 fetch 后检查 response.status 是否为 301/302/303/307/308
- 从 response.headers.get('Location') 提取跳转地址
- 手动发起下一次 fetch,并累加重定向计数
- 达到上限时抛出错误或终止
实现带次数限制与路径记录的重定向处理器
封装一个函数,接收初始 URL 和最大重定向次数(如 5),返回最终响应及完整跳转链:
- 用递归或循环发起请求,每次更新 currentUrl 和 redirectCount
- 跳转 URL 需转换为绝对地址(可借助 new URL(location, currentUrl))
- 记录每次的 status、url、headers(可选)到数组中
- 遇到非 3xx 响应即返回结果;超限则 throw new Error('Redirect limit exceeded')
注意跨域重定向的限制
当重定向目标是跨域资源时,redirect: 'manual' 下浏览器仍会屏蔽 Location 头(除非目标服务明确允许)。此时 response.headers.get('Location') 返回 null,无法继续跳转。解决方案包括:
- 服务端避免跨域重定向,改用同源中间页或返回数据引导前端跳转
- 后端设置 CORS 响应头:Access-Control-Expose-Headers: Location
- 必要时改用 window.location 或表单提交绕过 fetch 限制
对比 redirect: 'error' 的适用场景
若只需“禁止重定向并立即失败”,可用 redirect: 'error'。它会在遇到 3xx 响应时直接 reject,不提供 Location 信息。适合严格要求无跳转的接口调用(如鉴权检查),但无法用于跟踪或干预跳转过程。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











