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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:11