HTTP 307 Temporary Redirect
严格的临时重定向:前往另一个 URL,并按原样重复发送请求。
HTTP 307 是什么意思
HTTP 307 Temporary Redirect 的行为与 302 类似,但额外保证一点:客户端必须以相同的方法和请求体向新 URL 重复该请求。被重定向的 POST 仍然是 POST——不会被悄悄转换为 GET。
浏览器也会在内部生成 307:当某个站点在 HSTS 预加载列表中时,浏览器会自行将 http:// 升级为 https://,并在开发者工具中显示“307 Internal Redirect”,而不会发出任何网络请求。
307 响应的常见原因
- 一个 API 将 POST/PUT 请求临时重定向到另一个端点。
- HSTS:浏览器在内部将 http:// 升级为 https://(在开发者工具中显示为 307)。
- 负载削减或维护窗口期间,将写操作重新路由到备用端点。
开发者的最佳实践
- 当被重定向的请求携带的请求体必须在跳转过程中保留时,使用 307。
- 如果需要永久且保留方法的迁移,应改用 308。
- 请记住客户端会重新发送完整的请求体——如果可以提前将客户端指向正确的 URL,应避免对超大上传使用 307。
示例响应
HTTP/1.1 307 Temporary Redirect Location: https://api.example.com/v2/orders Retry-After: 0
常见问题
302 和 307 有什么区别?
两者都是临时的,但 307 禁止更改请求方法——POST 会以 POST 的形式重复。而使用 302 时,浏览器历史上会转换为 GET。
为什么开发者工具会显示“307 Internal Redirect”?
浏览器自行将请求升级为了 HTTPS(HSTS),而没有联系服务器。这会显示为一个合成的 307。
307 有对应的永久版本吗?
有——308 Permanent Redirect:同样保留方法,但缓存和搜索引擎会将该迁移视为永久性的。