307 重定向
307 重定向是一种 HTTP 状态码(307 Temporary Redirect),用于告知浏览器和搜索引擎某个 URL 已临时迁移到另一地址。它与 302 重定向相似,但有一个关键区别:在跟随重定向时,必须原封不动地保留原始 HTTP 方法(GET、POST 等)和请求体。
307 重定向是一种 HTTP 状态码(307 Temporary Redirect),用于告知浏览器和搜索引擎某个 URL 已临时迁移到另一地址。它与 302 重定向相似,但有一个关键区别:在跟随重定向时,必须原封不动地保留原始 HTTP 方法(GET、POST 等)和请求体。
为什么它很重要
由于 307 重定向在保留请求方法的同时明确表示这是临时迁移,因此可以在涉及 POST 表单提交或 API 调用的场景中防止数据丢失。当搜索引擎收到 307 响应时,会将原 URL 保留在索引中,且不会把链接权重传递给新 URL。这意味着一旦临时重定向被移除,原 URL 的 SEO 价值会完整保留。不过,长期维持 307 重定向会迫使搜索引擎反复访问原 URL,浪费抓取预算。如果临时情况已变成永久情况,建议改用 301 或 308 重定向。
与 302 的区别
| 属性 | 307(临时重定向) | 302(Found) |
|---|---|---|
| HTTP 方法保留 | 严格保留(POST 仍为 POST) | 方法可能改变(POST 可能变为 GET) |
| 标准定义 | 在 HTTP/1.1 中有明确定义 | 自 HTTP/1.0 起存在,但方法处理含糊不清 |
| 搜索索引 | 保留原 URL | 保留原 URL |
| 链接权重传递 | 不传递 | 不传递 |
| 主要适用场景 | 需要保留 POST 的临时迁移 | 一般性临时迁移 |
302 状态码存在历史上的含糊之处:在较旧的标准下,部分浏览器在跟随 302 时会把 POST 请求转换为 GET。307 状态码正是在 HTTP/1.1 规范中引入,用以消除这种含糊。当 POST 数据绝不能丢失时,307 是比 302 更稳妥的选择。
适用场景
- 服务器维护:当需要临时把流量路由到另一台服务器或维护页面时,307 重定向可确保维护完成后顺利回到原 URL。
- A/B 测试:在保留原 URL 搜索排名的同时,临时将一部分用户引导到不同的页面版本。
- HSTS(HTTP 严格传输安全):浏览器在将 HTTP 请求重定向到 HTTPS 时会在内部使用 307 状态码。这是浏览器层面的行为,无需单独的服务器配置。
- 临时迁移 POST 端点:当必须保留 POST 方法的表单提交或支付处理请求需要临时转发到不同端点时,307 重定向必不可少。
Sources:
相关 inblog 文章
inblog 如何提供帮助
inblog 的控制台对临时重定向使用 307 状态码。