SEO 百科
307 与 308
本页目录
307 与 308
307 与 308 是两个状态码,加入标准较晚,分别表示临时跳转和永久跳转,用来在跳转时不改变请求方法与请求体[2]。它们和 302、301 一一对应,差别只落在请求方法的处理上。看清这层差别,才能判断一个带表单或接口调用的地址该用哪一个。
与 301、302 的分工
四个状态码分成两行两列。行是生效时长,列是请求方法是否保留。
RFC 7538 给出的对照表把这条界线写得很清楚:301 和 302 允许客户端把请求方法从 POST 改成 GET,307 和 308 不允许改动[2]。请求方法指这次请求要做什么,例如 GET 表示读取,POST 表示提交数据。方法一改,表单里带的数据就可能丢失。
307 的定义是目标资源暂时位于另一个 URI,308 的定义是目标资源已被分配新的永久 URI[1]。时长口径与 302、301 完全一致。IANA 的状态码登记表把它们分别记为“Temporary Redirect”和“Permanent Redirect”,引用 RFC 9110 的对应小节[3]。
Yandex 的说明落到使用场合上,307 用于需要保留请求方法、请求体和原始请求头的临时跳转,308 用于同样要求下的永久跳转[4]。普通页面迁移大多是 GET,用 301 就够;带表单提交、带接口调用的地址,才需要动用到这两个代码。
引擎的处理方式
Google 对这两个代码的处理方式是归并。状态代码文档写明,307 等同于 302,308 等同于 301[5]。也就是说,索引系统对 307 使用弱信号,对 308 使用强信号,强信号表明跳转目标应当成为规范网址,规范网址指搜索引擎在多个版本里选定的正式地址。
同一份文档还给了一句提醒,搜索虽然同样处理这些代码,它们在语义上并不相同,应当按场景选择合适的代码,让电子阅读器、其他搜索引擎这类客户端也能受益[5]。信号强弱是搜索引擎的事,语义准确是全部客户端的事。
跳转过程中收到的内容照样被忽略,只有最终目标地址的内容参与收录[5]。这一点四个代码没有分别。
百度没有为 307 和 308 单独出说明,抓取诊断文档只给出跳数上限,连续跳转超过五次会重定向失败[6]。把这两个代码挂进链条,同样受这条上限约束。
该用与不该用的情况
适合使用 308 的场合:
- 站点换域名,站内有表单提交和接口调用,需要方法原样带到新地址[4]。
- 某个接口地址永久改名,调用方可能带请求体。
适合使用 307 的场合:
- 维护期间接口临时切到备用地址,恢复后还要切回[4]。
- 灰度发布期间按比例把请求临时导到新版本。
不该使用它们的场合:
- 普通
GET页面的迁移。老客户端对308的支持不如301普遍,301更稳妥[2]。 - 长期迁移中为图方便而混用。四个代码混着写,规则会越叠越乱。
服务器配置示例
Nginx 的 return 直接指定状态码,写法和 301、302 完全对称。
# 整站永久换域名,保留请求方法与请求体
server {
listen 80;
server_name old.example.com;
return 308 https://www.example.com$request_uri;
}
# 维护期间接口临时切换,请求方法保持不变
location /api/ {
return 307 https://api.example.com$request_uri;
}
Apache 的 Redirect 指令可以带状态码,正则匹配时,在 RewriteRule 的方括号里写 R=。
# 单页永久跳转,保留请求方法与请求体
Redirect 308 /old-submit https://www.example.com/new-submit
# 接口临时跳转,请求方法保持不变
RewriteEngine On
RewriteRule ^/api/(.*)$ https://api.example.com/api/$1 [R=307,L]
改完用一次带 POST 的请求验证。方法没被改成 GET,说明规则按预期生效。
常见误用
第一种是把所有 301 都换成 308,理由是新代码更严格。RFC 7538 在部署注意里提到,早期客户端未必认得 308,普通页面迁移用 301 更稳[2]。
第二种是用 307 做永久迁移。它属于临时那一档,信号弱,旧地址会继续留在结果里[5]。
第三种是以为 308 的信号比 301 更强。Google 的处理是两者等效,信号档位一样[5]。
第四种是把表单提交的地址用 301 处理。客户端可能把 POST 改成 GET,提交的数据随之丢失[2]。
附录
参见
参考资料
官方(境外)
- 《RFC 9110 : STD 97 : HTTP Semantics》,RFC 编辑部,2022-06。
- 《RFC 7538 : The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)》,RFC 编辑部,2015-04。
- 《Hypertext Transfer Protocol (HTTP) Status Code Registry》,IANA,2025-09-15 更新。
- 《HTTP status codes reference》,Yandex Webmaster。
- 《HTTP 状态代码以及网络连接错误和 DNS 错误对 Google 搜索有何影响》,Google 搜索中心。
官方(国内)
- 《平台工具使用手册(抓取诊断)》,百度搜索资源平台,2020-08-14 更新。
外部链接
无。