首页/网络/协议速查/307 Temporary Redirect 保持方法的临时跳转
HTTP 方法与状态码91 条

307 Temporary Redirect 保持方法的临时跳转

与 302 同为临时重定向,但严格要求客户端保持原请求方法与请求体。

协议速查网络更新于 2026-10-13

307 与 302 的区别

307 Temporary Redirect 与 302 同属临时重定向,区别在于对请求方法的要求:307 明确禁止客户端把 POST 改成 GET,必须用原方法和原请求体重新发往新地址。历史实现里不少客户端会把 302 的 POST 降级成 GET,这也催生了 303 与 307 的出现——需要方法保持就用 307,需要明确改成 GET 就用 303。

基本信息

名称307 Temporary Redirect
语义临时跳转且保持请求方法与请求体
规范RFC 9110 §15.4.8
对照301 与 308 为永久跳转、302 可能改写方法、303 强制改为 GET
缓存默认不缓存,除非显式给出缓存指令

重定向状态码对照

状态码临时或永久方法处理
301永久历史上可能被改写为 GET
302临时历史上可能被改写为 GET
303临时强制改为 GET
307临时必须保持原方法与请求体
308永久必须保持原方法与请求体

API 网关临时切换节点

API 网关临时切换节点
curl -si -X POST https://api.example.com/upload -d @file.bin
# HTTP/1.1 307 Temporary Redirect
# Location: https://api-b.example.com/upload
# 客户端应带原 POST 方法与请求体重新发往新地址(body 会被重放)
# 若客户端把方法降级成 GET,服务端会收到一个没有体的请求,表现为上传参数为空

典型使用场景

  • 网关临时把写请求切到备用节点,同时保持 POST 语义不变
  • 灰度或运维切换期间保持方法与请求体,避免出现「参数丢失」类事故
  • 对象存储返回临时跳转地址,客户端按原方法重放上传
  • 排查「上传偶发为空」:确认链路中间的重定向是否把方法改写成了 GET
307 要求客户端把请求体重新发往新地址,大文件会带来双份上传流量;容量规划与带宽预算要把这段重复传输算进去,否则容易出现「文件越大越慢且带宽翻倍」的现象。
307 与 308 都不限制客户端重试,但业务侧要注意幂等性:同一个非幂等请求被重放两次(如支付下单),需要靠幂等键去重,这是重定向语义之外的应用责任。

易错点

  • 部分客户端对 307 支持不一致(尤其老库),跨域场景要实测,否则出现「POST 变成 GET」导致参数全丢
  • 把 307 当成永久跳转写进配置:临时跳转的语义是每次请求都要再确认,长期依赖会让客户端一直多一次往返
  • 大文件场景忽略请求体重放:带宽与耗时翻倍,超时阈值若不调整会出现中途失败
  • 非幂等接口使用 307 跳转却无幂等键:重放可能造成重复下单或重复扣款

数据来源与参考

  • RFC 9110 §15.4.8 307 Temporary Redirect

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌