Skip to content
标签
note
字数
1014 字
阅读时间
5 分钟

HTTP 状态码 301302 都表示重定向,即告知客户端去访问另一个 URL。但它们在语义、浏览器行为和 SEO 影响上有本质的区别。

1. 定义与语义

  • 301 Moved Permanently (永久重定向)

    • 语义:请求的资源已经永久地移动到了一个新的位置。未来的所有请求都应该使用这个新的 URI。
    • 场景:网站更换域名、URL 结构调整、HTTP 升级到 HTTPS。
  • 302 Found (临时重定向)

    • 语义:请求的资源临时存放在一个不同的 URI。客户端在本次请求中使用新的 URI,但未来的请求仍应使用原始 URI。
    • 场景:用户未登录时访问个人中心,临时跳转到登录页;A/B 测试;活动期间将首页临时指向活动页。

注意:在 HTTP/1.0 中,302 的定义是 Moved Temporarily。在 HTTP/1.1 中,为了更清晰地表达“临时”的含义,新增了 307 Temporary Redirect,而 302 的含义则变为 Found。但在实际应用中,302 仍然被广泛用作临时重定向。

2. 浏览器缓存行为

  • 301: 浏览器会默认缓存这个重定向。在缓存有效期内,如果再次访问旧地址,浏览器会直接从缓存中读取新地址并发起请求,而不会再请求旧地址。
  • 302: 浏览器默认不缓存这个重定向(除非响应头中通过 Cache-ControlExpires 明确指示)。每次访问旧地址时,浏览器都会先请求旧地址,然后根据服务器返回的 302 响应再跳转到新地址。

3. 对搜索引擎 (SEO) 的影响

这是两者在实践中最重要的区别之一。

  • 301: 搜索引擎会理解为“网址已永久更换”。它会将旧地址的权重(如 PageRank)和排名传递给新地址,并更新其索引为新地址。这是进行网站迁移或 URL 规范化时推荐的做法。
  • 302: 搜索引擎会理解为“临时跳转”。它会抓取新地址的内容,但保留旧地址的索引和权重。搜索引擎认为旧地址未来还会恢复使用。

4. 安全性与 URL 劫持

错误地使用 302 可能导致“URL 劫持”问题。

假如你的网站 B 内容优质,但一个不怀好意的人用自己的短域名 A 做了一个 302 重定向到你的网站 B。由于 302 是临时的,搜索引擎可能会认为内容属于域名 A,从而在搜索结果中显示域名 A,但展示的却是你网站 B 的内容。这就相当于你的流量和权重被域名 A“劫持”了。

使用 301 则可以有效避免此问题,因为它明确告诉搜索引擎,内容的“所有权”已经永久转移到了新地址。

总结

特性301 Moved Permanently302 Found / 307 Temporary Redirect
语义永久移动临时移动
缓存默认缓存默认不缓存
SEO传递权重,更新索引保留权重,不更新索引
用途域名更换,URL 规范化未登录跳转,A/B 测试,活动页
方法变更原始 POST 请求可能会被浏览器变为 GET302 同样可能变为 GET307 则保证不改变方法

核心原则:如果是永久性的变更,使用 301;如果是临时性的跳转,使用 302 (或 307)。

参考

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写