HTTP 状态码
查询 HTTP 状态码的含义,并分清那些容易混淆的组合——401 与 403、301 与 308、400 与 422。
仅在浏览器中处理免费使用
两边都能查。
46 个
| 状态码 | 理由短语 | 何时使用 |
|---|---|---|
| 100 | Continue | |
| 101 | Switching Protocols | 升级到 WebSocket 时使用。 |
| 103 | Early Hints | 在真正的响应就绪前先发出预加载提示。 |
| 200 | OK | 请求成功时的默认值。 |
| 201 | Created | 新资源已创建,用 Location 响应头指向它。 |
| 202 | Accepted | 只是排了队,还没做完,调用方需要回来查。 |
| 204 | No Content | 成功但没有内容可返回,带上正文也会被忽略。 |
| 206 | Partial Content | 响应 Range 请求头,只返回文件的一部分。 |
| 301 | Moved Permanently | 永久迁移。客户端可以把方法改成 GET。 |
| 302 | Found | 临时迁移。同样可能把方法改成 GET。 |
| 303 | See Other | 到别处去取结果,且总是用 GET。 |
| 304 | Not Modified | 缓存副本仍然有效,不返回正文。 |
| 307 | Temporary Redirect | 和 302 一样,但保持原方法。 |
| 308 | Permanent Redirect | 和 301 一样,但保持原方法。 |
| 400 | Bad Request | 完全无法理解这个请求。 |
| 401 | Unauthorized | 未通过认证。虽然名字如此,它说的是身份而不是权限。 |
| 402 | Payment Required | |
| 403 | Forbidden | 已经认证,但仍然不允许。 |
| 404 | Not Found | 没有这个资源,或者服务器不打算承认有。 |
| 405 | Method Not Allowed | 路径存在但这个动词不支持,把支持的写进 Allow。 |
| 406 | Not Acceptable | 客户端要求的格式一个也生成不了。 |
| 408 | Request Timeout | |
| 409 | Conflict | 与当前状态冲突,典型的是键重复。 |
| 410 | Gone | 被有意删除,不会再回来。 |
| 411 | Length Required | |
| 412 | Precondition Failed | If-Match 或 If-None-Match 的条件没有成立。 |
| 413 | Content Too Large | 正文超过了服务器接受的大小。 |
| 414 | URI Too Long | |
| 415 | Unsupported Media Type | Content-Type 不是这个接口处理的格式。 |
| 416 | Range Not Satisfiable | |
| 418 | I'm a teapot | 1998 年愚人节的玩笑,至今仍在注册表里。 |
| 422 | Unprocessable Content | 格式正确但语义有误,校验错误通常用它。 |
| 425 | Too Early | |
| 426 | Upgrade Required | |
| 428 | Precondition Required | |
| 429 | Too Many Requests | 请求过于频繁,用 Retry-After 告诉对方何时再来。 |
| 431 | Request Header Fields Too Large | |
| 451 | Unavailable For Legal Reasons | 因下架令等法律原因被屏蔽。 |
| 500 | Internal Server Error | 未处理的失败,是谁都不该主动返回的兜底。 |
| 501 | Not Implemented | |
| 502 | Bad Gateway | 上游服务器返回了无效内容。 |
| 503 | Service Unavailable | 宕机或过载,预计会恢复。 |
| 504 | Gateway Timeout | 上游服务器没有及时应答。 |
| 505 | HTTP Version Not Supported | |
| 507 | Insufficient Storage | |
| 511 | Network Authentication Required | 像公共 Wi-Fi 那样要求先登录的关口。 |
容易混淆的组合
401403
401 表示不知道你是谁;403 表示知道,但答案还是不行。
301308
301 允许客户端把 POST 变成 GET,308 会保留方法。接口请用 308。
302303
302 可能改变方法,303 总是换成 GET。表单提交之后用 303。
400422
400 用于服务器解析不了的正文,422 用于解析了但内容不对。
404410
404 说这里没有;410 说它被有意删除了,别再来问。
502503
502 是上游返回了无意义的内容,503 是这台服务器现在无法提供服务。
文件在浏览器本地处理,不会上传到服务器。
使用方法
无需注册、无需安装,也没有使用次数限制,完全免费。
输入号码或理由短语的一部分即可查找。列表随输入收窄,每一条都附有什么时候该返回它。
首位数字决定类别:1xx 是信息,2xx 成功,3xx 重定向,4xx 是请求方的问题,5xx 是服务端的问题。即使表里没有的码,也能看出这一层。
4xx 和 5xx 的区分在实际工作里分量不同。对畸形请求返回 500,会让值班的人去找一个并不存在的服务故障;对崩溃的处理返回 400,则会把真正的故障掩盖掉。
下面这些组合是代码评审里真正会争论的。401 表示不知道你是谁,403 表示知道但仍然不行。权限问题返回 401,等于让客户端把已经发过的凭据再发一遍。
理由短语保持规范原文而不翻译,因为那才是实际在链路上传输的文字。
输入的内容不会上传到服务器,查询全部在浏览器本地完成。