状态码301和302的区别
HTTP状态码301和302都是重定向响应,但它们在语义和使用场景上有重要区别:
1. 301 Moved Permanently(永久重定向)
- 语义:请求的资源已永久移动到新位置
- 浏览器行为:
- 会自动更新书签/收藏夹中的URL
- 后续请求会直接跳转到新URL(跳过原URL)
- SEO影响:
- 搜索引擎会将权重和排名转移到新URL
- 原URL会从索引中移除
- 典型场景:
- 网站改版更换域名
- URL结构调整(旧URL永久废弃)
- HTTP强制跳转HTTPS(推荐配合301)
- 示例:
HTTP/1.1 301 Moved Permanently Location: https://newdomain.com/new-path
2. 302 Found(临时重定向)
- 语义:请求的资源临时从不同位置响应
- 浏览器行为:
- 不会更新书签
- 每次访问都会先请求原URL再跳转
- SEO影响:
- 搜索引擎会继续索引原URL
- 不会传递权重到新URL
- 典型场景:
- A/B测试
- 临时维护页面
- 登录后跳转回原页面
- 地理定位跳转
- 示例:
HTTP/1.1 302 Found Location: https://example.com/temporary-path
对比表格:
特性 | 301 | 302 |
---|---|---|
重定向性质 | 永久 | 临时 |
浏览器缓存 | 会缓存跳转 | 通常不缓存 |
书签更新 | 自动更新 | 保留原书签 |
SEO处理 | 权重转移 | 权重保留在原URL |
典型用途 | 域名变更、URL永久重构 | 临时维护、A/B测试 |
后端请求次数 | 第一次后不再请求原URL | 每次都要先请求原URL |
性能影响 | 更好(减少后续跳转) | 较差(每次需要跳转) |
注意事项:
-
302的变种:
- HTTP/1.1规范中302的实际名称是"Found"
- 303 See Other和307 Temporary Redirect是302的更明确版本
-
现代替代方案:
- 临时重定向推荐使用307(保持请求方法)
- POST请求重定向推荐使用303(强制转为GET)
-
错误使用后果:
- 误用301会导致搜索引擎错误转移权重
- 误用302可能导致爬虫无法正确索引内容
正确选择重定向类型对网站的可维护性和SEO至关重要。永久性更改用301,临时性调整用302/307。