一、什么是 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 重定向状态码分类
状态码含义特点是否影响 SEO301永久重定向(Moved Permanently)URL 永久变更,客户端应更新本地缓存✅ 是(推荐)302临时重定向(Found)URL 临时变更,客户端继续使用原始 URL❌ 否303See Other重定向用于 POST 之后,转到另一个 GET 页面✅ 适用于 API307Temporary Redirect类似 302,但保留请求方法✅ 更安全308Permanent 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.comrequests.get(url, allow_redirects=True)