常见 HTTP 状态码速记
我记状态码不靠数字规律,靠「这一类在怪谁」。四张表按类别排。
2xx:请求成了
| 码 | 含义 | 我实际遇到它的场景 |
|---|---|---|
| 200 | 成功,响应体就是你要的 | 查缓存时最讨厌它,说明又完整传了一遍 |
| 201 | 创建好了,带位置头 | 接口写数据,静态站碰不到 |
| 204 | 成功,故意不给响应体 | 删除类操作的返回,别当成缓存命中 |
| 206 | 只给请求的那一段 | 拖音频进度条、断点续传 |
3xx:先看它让谁动
| 码 | 含义 | 我实际遇到它的场景 |
|---|---|---|
| 301 | 永久换地址,老实现允许改掉请求方法 | 带不带 www 的跳转 |
| 302 | 临时换地址,不该被长期缓存 | 登录后跳回原页,我当 301 用过,被缓存后回不来 |
| 304 | 不是重定向,是缓存协商:内容没变 | 刷新时最想见到它,响应体是空的 |
| 307 | 临时换地址,方法和请求体不许改 | 带请求体的接口重定向 |
| 308 | 永久换地址,方法和请求体不许改 | 确定的长期迁移我优先用它 |
301 与 308 只差一句:老实现允许前者把请求方法改掉,后者禁止,302 与 307 同理。304 不是跳转,是浏览器带 If-None-Match 去问、服务器答「没变」。
4xx:怪请求这一侧
| 码 | 含义 | 我实际遇到它的场景 |
|---|---|---|
| 400 | 格式本身就不对 | 查询串少转义一个字符 |
| 401 | 没带身份凭证 | 抓带密码的预览页 |
| 403 | 知道你是谁,但不给看 | 目录列表被禁、权限位不对 |
| 404 | 这个地址下没有东西 | 相对路径层数写错,最常见 |
| 405 | 地址对,方法不被允许 | 静态页表单的方法用错 |
| 408 | 请求没发完就超时 | 网络断了还挂着的那次提交 |
| 410 | 以前有,现在永久没了 | 删掉的旧文章,比 404 老实 |
| 422 | 格式没问题,内容处理不了 | 表单校验失败 |
| 429 | 请求太密,按响应头等一会儿 | 脚本循环抓接口被限 |
5xx:怪服务这一侧
| 码 | 含义 | 我实际遇到它的场景 |
|---|---|---|
| 500 | 服务端自己崩了,没归类 | 脚本页面报错,得看日志 |
| 502 | 网关拿到无效响应 | 反代后面的应用刚重启 |
| 503 | 暂时不能服务,稍后再来 | 维护窗口,该带等待时间 |
| 504 | 网关等上游等到超时 | 上游卡住,转圈很久才报错 |
口诀:502 是上游回了,但东西不能用;504 是上游没回、等到超时。都是网关替你背锅,区别在上游有没有出声。
本站 404 页面怎么生效
nginx 只留必要几行,关键是「找不到文件」和「显示哪个页面」分开写:
server {
listen 443 ssl;
root /srv/web; # 根目录,404.html 就在这一层
location / {
try_files $uri $uri/ =404; # 找不到就产生 404 状态
}
error_page 404 /404.html; # 再内部指向它
}
最后一段直接写成 /404.html 也能显示,但状态码是 200,检查工具会被糊过去,比老实报 404 更糟。不能改配置的静态托管要求两条:文件用约定名字放在站点根目录,并在托管设置里显式指一次错误页,否则它默认返回首页,整站全是软 404。