HTTP状态码301与302的区别
301永久重定向与302临时重定向的区别和使用场景
问题
HTTP 状态码 301 和 302 有什么区别?分别在什么场景下使用?
解答
301 永久重定向
表示资源已永久移动到新位置。浏览器会缓存这个重定向,下次直接访问新地址。
# Nginx 配置示例
server {
listen 80;
server_name old-domain.com;
# 301 永久重定向到新域名
return 301 https://new-domain.com$request_uri;
}
302 临时重定向
表示资源临时移动到新位置。浏览器不会缓存,每次都会先访问原地址。
# Nginx 配置示例
server {
listen 80;
server_name example.com;
# 302 临时重定向(如维护页面)
location /maintenance {
return 302 /temp-page.html;
}
}
对比表格
| 特性 | 301 | 302 |
|---|---|---|
| 含义 | 永久重定向 | 临时重定向 |
| 浏览器缓存 | 会缓存 | 不缓存 |
| SEO 权重 | 传递给新 URL | 保留在原 URL |
| 请求方法 | 可能变为 GET | 可能变为 GET |
Node.js 示例
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/old-page') {
// 301 永久重定向
res.writeHead(301, { Location: '/new-page' });
res.end();
} else if (req.url === '/temp') {
// 302 临时重定向
res.writeHead(302, { Location: '/maintenance' });
res.end();
} else {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello');
}
});
server.listen(3000);
使用场景
301 适用于:
- 网站更换域名
- URL 结构永久调整
- HTTP 强制跳转 HTTPS
302 适用于:
- 网站临时维护
- A/B 测试
- 登录后跳转回原页面
- 短链接服务
关键点
- 301 是永久重定向,浏览器会缓存;302 是临时重定向,不缓存
- 301 会将 SEO 权重传递给新 URL,302 不会
- 网站换域名用 301,临时跳转用 302
- 两者都可能将 POST 请求变为 GET(如需保持方法,用 307/308)
- 滥用 302 会影响 SEO 排名
目录