410 是什么
410 Gone 表示目标资源曾经存在,现在被有意永久删除,并且不会再恢复。它与 404 的关键区别在于「确定性」:404 只说明服务器找不到这个地址,可能只是路径写错或暂时不可用;410 则是明确的永久移除声明。对搜索引擎与缓存而言这个差别有意义——收到 410 可以比 404 更快地移除索引与缓存副本。
基本信息
| 状态码 | 410 Gone |
|---|---|
| 语义 | 资源已被永久移除且不会恢复 |
| 规范 | RFC 9110 §15.5.11 |
| 是否可缓存 | 属于默认可启发式缓存的响应码 |
| 与 404 的区别 | 404 表示找不到,不承诺是否永久 |
| 与 451 的区别 | 451 用于法律或合规原因导致的不可用 |
返回 410 的典型写法
返回 410 的典型写法
location = /old-promo {
return 410; # 明确声明已永久下线
}
# 也可以带上说明页面,或在响应体里给出替代内容的位置
location ^~ /legacy/ {
return 410;
}三个易混状态码
| 状态码 | 含义 | 使用建议 |
|---|---|---|
| 404 | 资源不存在,未说明是否永久 | 路径错误或状态不确定时的默认选择 |
| 410 | 资源曾存在且已永久移除 | 确认下线的旧活动页、旧接口 |
| 451 | 因法律或合规原因不可用 | 内容审查、版权与地域限制场景 |
典型使用场景
- 下线旧活动页与旧接口:明确告知客户端不要再试
- 清理已迁移内容:原地址返回 410,同时在新地址保留可访问页面
- SEO 策略调整:希望搜索引擎尽快移除索引而非持续抓取 404
- 客户端快速失败:让调用方明确区分「已废弃」与「临时找不到」
- 防止接口被反复探测:旧版本路径统一返回 410,减少无效请求
410 与 404 都属于默认可启发式缓存的响应码,浏览器与 CDN 有可能会缓存一段时间。如果业务后来反悔要恢复内容,除了改回响应还得清理缓存,否则部分用户会持续看到旧的 410。因此不确定是否永久时,用 404 更稳妥。