大禹记。

首页 / 笔记 / 正文

常见 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。