标签
note
字数
1014 字
阅读时间
5 分钟
HTTP 状态码 301 和 302 都表示重定向,即告知客户端去访问另一个 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-Control或Expires明确指示)。每次访问旧地址时,浏览器都会先请求旧地址,然后根据服务器返回的302响应再跳转到新地址。
3. 对搜索引擎 (SEO) 的影响
这是两者在实践中最重要的区别之一。
301: 搜索引擎会理解为“网址已永久更换”。它会将旧地址的权重(如 PageRank)和排名传递给新地址,并更新其索引为新地址。这是进行网站迁移或 URL 规范化时推荐的做法。302: 搜索引擎会理解为“临时跳转”。它会抓取新地址的内容,但保留旧地址的索引和权重。搜索引擎认为旧地址未来还会恢复使用。
4. 安全性与 URL 劫持
错误地使用 302 可能导致“URL 劫持”问题。
假如你的网站 B 内容优质,但一个不怀好意的人用自己的短域名 A 做了一个 302 重定向到你的网站 B。由于 302 是临时的,搜索引擎可能会认为内容属于域名 A,从而在搜索结果中显示域名 A,但展示的却是你网站 B 的内容。这就相当于你的流量和权重被域名 A“劫持”了。
使用 301 则可以有效避免此问题,因为它明确告诉搜索引擎,内容的“所有权”已经永久转移到了新地址。
总结
| 特性 | 301 Moved Permanently | 302 Found / 307 Temporary Redirect |
|---|---|---|
| 语义 | 永久移动 | 临时移动 |
| 缓存 | 默认缓存 | 默认不缓存 |
| SEO | 传递权重,更新索引 | 保留权重,不更新索引 |
| 用途 | 域名更换,URL 规范化 | 未登录跳转,A/B 测试,活动页 |
| 方法变更 | 原始 POST 请求可能会被浏览器变为 GET | 302 同样可能变为 GET,307 则保证不改变方法 |
核心原则:如果是永久性的变更,使用 301;如果是临时性的跳转,使用 302 (或 307)。