Axios无法自动跟随307重定向获取数据,该如何处理?
Axios 307重定向适配方案
Axios默认支持3xx重定向自动跟随,307跳转异常需要按运行环境分别排查调整:
Node.js 运行环境
- Node.js侧的跳转逻辑由Axios本身控制,可通过修改请求配置适配:
await axios({ url: '请求地址', method: 'POST', // 调整最大跳转次数,默认值为5,可根据业务需求调大 maxRedirects: 10, // 显式允许307状态码进入跳转逻辑 validateStatus: status => (status >= 200 && status < 300) || status === 307, beforeRedirect: (options, response) => { if (response.status === 307) { // 强制保持原请求方法和请求体,避免Axios自动转为GET请求 options.method = response.config.method; options.data = response.config.data; // 如跳转地址可信,可手动保留Authorization等敏感头(默认跨域跳转时会自动删除) options.headers.Authorization = response.config.headers.Authorization; } } })
浏览器运行环境
- 浏览器侧的重定向逻辑由浏览器内核控制,Axios无法直接干预,可按以下方向排查:
- 跨域请求触发307时,需确认重定向后的目标地址也配置了对应的CORS规则,否则浏览器会直接拦截跳转返回空响应
- 如果使用Fetch适配器,可显式指定跳转模式:
await axios({ url: '请求地址', adapter: 'fetch', redirect: 'follow' }) - HTTPS到HTTP的307跳转属于浏览器混合内容安全限制,无法通过前端配置修改,需调整服务端重定向逻辑统一走HTTPS协议
通用排查点
- 确认请求带大体积请求体时,服务端是否要求携带
Expect: 100-continue头,可手动添加该头适配:headers: { 'Expect': '100-continue' } - 确认请求的自定义头没有触发服务端的跨域预检拦截,导致重定向逻辑未生效
内容的提问来源于stack exchange,提问作者ben shalev
相关产品推荐
相关产品推荐

