HTTP 重定向详解
一、什么是 HTTP 重定向?
HTTP 重定向是一种通过服务器响应指示客户端(通常是浏览器)访问另一个 URL 的机制。服务器返回特定的 HTTP 状态码(如 301、302 等)和新的目标地址,客户端接收到后自动重新发起请求。
其本质是:通过 HTTP 响应告诉客户端当前请求的资源地址已更改,应转向其他地址获取资源。
二、重定向原理
HTTP 协议规范规定,若服务器需要客户端访问另一个地址,应在响应中返回:
- 一个 重定向状态码(3xx)
- 一个 Location 头,指明新的目标 URL
例如:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page
浏览器或 HTTP 客户端会自动解析 Location 头并重定向到新地址。
三、HTTP 重定向状态码分类
状态码 | 含义 | 特点 | 是否影响 SEO |
---|---|---|---|
301 | 永久重定向(Moved Permanently) | URL 永久变更,客户端应更新本地缓存 | ✅ 是(推荐) |
302 | 临时重定向(Found) | URL 临时变更,客户端继续使用原始 URL | ❌ 否 |
303 | See Other | 重定向用于 POST 之后,转到另一个 GET 页面 | ✅ 适用于 API |
307 | Temporary Redirect | 类似 302,但保留请求方法 | ✅ 更安全 |
308 | Permanent Redirect | 类似 301,但方法也被保留(如 POST→POST) | ✅ 支持较少 |
四、常见应用场景
- 网站域名迁移
example.com → www.example.com
http:// → https:// - URL 重写规范化(SEO)
http://example.com/page → http://example.com/page/
可避免内容重复、优化搜索引擎抓取。 - 用户权限跳转
未登录用户访问 /profile → 自动重定向到 /login
使用 302 或 303 临时跳转。 - 支付平台回调
支付成功后回跳到商户页面:
303 See Other
Location: /order-success - 短链接
从短地址跳转到原始长地址的过程
五、服务端实现方式
Nginx 示例
301 永久重定向
server {
listen 80;server_name old.example.com;
return 301 https://new.example.com$request_uri;
}
将 HTTP 重定向为 HTTPS
server {
listen 80;
return 301 https://$host$request_uri;
}
六、客户端行为说明
- 浏览器默认会 自动跳转,对用户无感知
- 大多数 HTTP 客户端(如 curl、requests)默认不跟随重定向,需显式设置
- curl -L http://example.com
- requests.get(url, allow_redirects=True)