HTTP状态码其实就是一种标准化的响应标识, 它是服务器在应对客户端发出的请求时给回来的那个标识。这组编码里面总共包含有五位数字, 不过前三位才是真正有效的内容。最后两位通常是保留位, 并没有实际使用。

当开发人员和运维人员需要去排查接口出现的问题或者是调试Web应用程序的时候, 他们必须要能够快速地确认每一个状态码具体代表什么意思以及应该怎么处理。

这是一款的工具, 这个工具是高效的, 这个工具是用来查询HTTP状态码的, 这个工具能够把那些分散在RFC文档中的信息给聚合起来, 然后变成可以直接来检索的结构化数据, 这样就把排查的时间从分钟级压缩到了秒级。

01状态码五大类速查

类别 含义 典型场景
1xx(信息) 请求已接收,处理中 100 Continue
2xx(成功) 请求正常完成 200 OK、201 Created、204 No Content
3xx(重定向) 需进一步操作 301 Moved Permanently、302 Found、304 Not Modified
4xx(客户端错误) 请求参数或权限有误 400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found
5xx(服务端错误) 服务器内部故障 500 Internal Server Error、502 Bad Gateway、503 Service Unavailable、504 Gateway Timeout

02高频状态码含义对照

200表示这个资源是正常地返回过来的, 整体情况属于一切都没问题。

401: 没有携带鉴权凭据, 或者携带了无效的鉴权凭据, 这些鉴权凭据包括Token和Cookie, 这时候需要重新登录, 或者刷新令牌。

403, 用户虽然已经完成了身份认证过程, 但是并没有权限访问目标资源, 这种情况下需要去检查基于角色的访问控制或者是访问控制列表等方面的配置有没有问题。

404: 请求路径在服务器上不存在, 这种情况常见于URL拼写错误或者资源已被删除。

出现了429这个状态码, 意思就是说请求的频率超过了规定的限制, 大家必须去看一下那个叫 Retry-After 的响应头里写的具体是多少秒, 然后按照那个时间间隔来慢慢重试就行。

出现500错误, 这意味着服务端发生了未被捕获的异常, 你需要查看后端的日志文件, 以便定位到具体发生报错的那一行代码。

502: 上游的后端服务那边给回来的回应, 它是没用的东西, 这种状况大多数时候是因为程序进程直接崩了掉的, 或者是端口根本没法通起来。

503这个情况的意思是, 那个服务目前正在进行维护或者承受的负载太大了, 导致它暂时没办法给大家用了。

03查询工具使用指南

HTTP状态码查询工具:一张表查清所有状态码含义(图1)

拿由 gname.xin 提供的 HTTP状态码查询工具当作例子来说吧, 具体的操作步骤是这样的。

1. 你需要在搜索框里输入状态码的数字, 例如数字404, 或者你也可以输入相关的关键词, 比如英文单词unauthorized。

2. 页面会返回状态码的RFC原文定义, 包括常见触发原因和推荐处置步骤。

3. 如果需要进行批量排查, 那么就可以使用“按类别筛选”这个功能, 然后把全部属于4xx或者5xx的条目一次性导出成CSV格式的文件。

4. 这个工具会对每一个状态码的默认行为差异进行标注, 它会关注主流框架, 包括Spring、Node.js以及Go net/http, 这样方便跨语言团队去做到统一的深入理解。

04常见疑难

“404和410的区别?” 404的情况是表示那个资源不存在, 可能这个资源从来就没有存在过, 也可能是已经被删除掉了, 而410的情况则是表示那个资源曾经存在但是现在已经被永远地移除了, 从语义上来说, 410能够更加明确地告诉客户端, 不要去再次请求那个地址。

对于“502和504如何区分?”这个问题, 你需要知道的是, 502状态码表示的是网关接收到了来自上游服务器的非法响应, 这种非法响应的情况可能包括收到了空包数据或者格式错误的反馈信息。

而504状态码则表示是等待上游服务器返回响应的时间超出了规定的时限, 也就是发生了超时的情况。在进行故障排查的时候, 第一步应该先检查上游的那个业务进程是否还在正常地运行并且存活, 然后再进一步去分析网络链路中是否存在延迟过高的问题。

问题是, 用户方是否可以自行指定具体的状态数值? 相关规范明确指出, 这类代码体系必须交由专门机构集中控制, 普通业务开发者不应该自己去发明那些三位数的数字标识。

假如确实有需要补充说明的特殊情况, 比较可行的办法是利用消息内容里的特定错误编号, 像是名为errCode这样的字段位置, 来传递更加细致明确的问题含义。

把这个速查表和gname.xin这个在线工具配合起来使用, 可以满足在开发调试阶段, 还有线上故障发生时的应急处理阶段, 对于状态码进行查询的这些需求。这是一个全程覆盖的过程。你不需要再去翻原始的RFC文档了。