Location 是什么
Location 是响应里告诉客户端「去这里」的字段:3xx 重定向时给出新地址,201 创建成功时给出新资源地址,202 也常用它指向任务状态查询地址。它的值可以是相对引用,此时按请求 URL 解析。它是标准里唯一被广泛用于「指向另一个资源」的响应头,跳转与创建两类语义都靠它承载。
基本信息
| 名称 | Location |
|---|---|
| 作用 | 重定向目标 / 新资源地址 |
| 规范 | RFC 9110 §10.2.2 |
| 常见配合 | 301、302、307、308、201、202 |
| 取值形式 | 绝对 URL 最稳,相对引用按请求 URL 解析 |
| 权限要求 | 服务端配置,无需特殊权限 |
重定向状态码对照
| 状态码 | 方法是否保留 | 适用场景 |
|---|---|---|
| 301 | 语义为永久,客户端常把 POST 改 GET | 旧地址永久迁移,搜索引擎可传递权重 |
| 302 | 客户端常把 POST 改 GET | 临时跳转,兼容性最好 |
| 307 | 严格保留方法与请求体 | 临时跳转且必须保持 POST |
| 308 | 严格保留方法与请求体,永久 | 永久跳转且必须保持 POST |
| 304 | 不产生跳转 | 条件请求命中,不涉及 Location |
查看跳转目标
查看跳转目标
curl -si https://example.com/old | grep -iE '^(HTTP|location)'
# HTTP/1.1 301 Moved Permanently
# Location: https://example.com/new
curl -sIL https://example.com/old | grep -cE '^HTTP/' # 数一下跳转链有几跳
curl -si -X POST https://api.example.com/users -d '{}' | grep -i '^location' # 201 场景典型使用场景
- 站点改版后把旧 URL 永久指向新 URL,保住已有的搜索收录
- HTTP 自动跳转到 HTTPS,或统一补齐 www 前缀
- 短链接服务把短码指向真实长地址
- 创建接口返回新资源地址,客户端不必再去查列表
- 异步任务用 202 + Location 给出进度查询地址
落地注意
- 跳转链尽量不超过一跳,链路过长会拖慢首屏并让来源信息层层丢失
- 循环跳转是「重定向次数过多」的直接原因,上线前用 curl -IL 数一下跳数
- HTTPS 站点内部跳转必须保持 https,跨协议降级会被浏览器拦截或告警
- 301 会被浏览器与 CDN 积极缓存,配错了很难立刻撤回
Location 的值若来自用户可控参数(如 ?next=),必须做白名单校验,否则形成开放重定向,常被用于钓鱼与令牌窃取。