redirect 有三个可选值:① "follow"(默认,自动跟随重定向);② "error"(遇重定向抛 typeerror);③ "manual"(返回 3xx 响应,需手动处理 location)。

Fetch API 的 redirect 选项用于控制请求遇到 HTTP 重定向(如 301、302、307、308)时的行为,默认是自动跟随,但你可以显式配置为不跟随或手动处理。
redirect 有哪些可选值
redirect 是 fetch() 第二个参数(init 对象)中的一个字段,接受三个字符串值:
-
"follow":默认行为,自动跟随重定向,最终响应是重定向链末端的响应(状态码不再是 3xx); -
"error":遇到任何重定向就抛出TypeError,响应不会被返回; -
"manual":遇到重定向时,fetch 返回一个状态码为 3xx 的响应对象(如 302),且response.redirected为true,但不会自动跳转,需你自己读取response.headers.get("Location")并发起新请求。
用 "error" 阻止自动重定向并捕获错误
适合需要严格控制跳转逻辑、或禁止跨源重定向的场景:
fetch("/api/old-path", { redirect: "error" })
.then(response => console.log("成功获取响应(无重定向)"))
.catch(err => {
if (err.name === "TypeError" && err.message.includes("redirect")) {
console.log("请求被重定向,被主动拒绝");
}
});
用 "manual" 手动处理重定向
适用于需要记录跳转路径、验证 Location 地址安全性、或实现自定义跳转逻辑(比如只允许同域跳转):
fetch("/login", { redirect: "manual" })
.then(response => {
if (response.redirected) {
const location = response.headers.get("Location");
if (location && location.startsWith("/")) {
return fetch(location, { redirect: "manual" });
} else {
throw new Error("不允许跳转到外部地址");
}
}
return response;
})
.then(finalResponse => finalResponse.json())
.catch(err => console.error("处理失败:", err));
注意点和常见坑
- 设置
redirect: "manual"后,响应体仍可读(如response.text()),但内容通常是空或重定向页面 HTML,实际意义不大; -
response.url始终是最终发出请求的 URL(不是初始 URL),即使redirect: "manual",它也等于初始 URL(因为没发新请求); - 跨域重定向受 CORS 限制:若重定向目标是不同源,且目标未带合适 CORS 头,即使
redirect: "follow",fetch 也会失败(浏览器拦截); -
redirect仅影响 fetch 自身行为,不影响后续你手动发起的请求,那些请求需单独配置。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











