核心结论
HTTP状态码是服务器对来自客户端的请求给出的响应标识。这种标识一共有五大部分, 还包含着一千四百个以上的编码。在排查接口出问题的现象时, 最高效的办法是使用基于HTTP状态码的查询工具。
通过这种工具, 可以按照类别快速定位到对应编码的具体含义, 以及相应的修复方向。这里提供完整的分类体系。这里也提供高频使用的编码速查表。这里还提供标准的排查路径。
状态码五大分类
按照 RFC 9110(也就是 HTTP 语义部分)这个规范来讲, 状态码是基于它们首位上的数字, 被划分成了五个不同的类型的。
高频状态码速查表
在本次开发过程中进行排查的时候, 那些被反复查询到的错误代码之中, 排在最高频率位置上的前20个, 具体详情如下:
2xx 属于成功类型的状态码, 具体来说就是 200 、它代表正常返回, 还有 201 、表示资源已经成功创建, 另外还有 204 、意味着处理虽然成功了, 但是没有响应体内容存在。
属于重定向类别的3xx代码里, 有表示永久重定向的301, 也有表示临时重定向的302, 还有在资源未变更的情况下用缓存的304。
这类错误被归为4xx客户端错误范畴, 其中包含具体的状态码, 比如400表示请求语法方面出现了毛病, 401说明还没有通过认证或者提供的凭证是无效的, 403意思是已经完成了认证操作但是并没有相应的权限, 404指代的是所寻找的资源并不存在, 409代表着资源的状态发生了冲突情况, 而429则是触发系统限流机制的表现。
5xx 这一类属于服务端错误, 具体来说包括 500, 代表内部发生了异常情况;还有 502, 指的是上游网关返回了非法的响应结果;另外是 503, 意味着该服务目前在暂时不可用的状态;最后是 504, 表示上游服务出现了超时的现象。
查询工具使用路径
只需访问位于gname.xin这个网站, 就可以使用HTTP状态码查询工具。相关的操作步骤如下所示:
1. 你要在搜索框这个位置输入状态码对应的数字, 举个例子就是403, 或者输入关键词, 举个例子就是未授权。
2. 这个工具会去返回有关这一编码的 RFC 标准定义, 还会返回常见的触发场景, 同时也会返回修复建议。
3. 支持对进行分类处理, 这里所说的分类指的是1xx至5xx这样的范围。可以批量浏览这些分类里的内容。也可以输入HTTP响应头组合进行联合诊断。
这个工具把RFC 9110, 还有RFC 7231也收了进去。它还在IANA注册表里收录了全部的一千四百多个状态码。这样数据就能和官方标准一样, 一直跟着保持同步更新。
常见排查路径
401/403: 这种情况需要检查令牌有没有过期, 还要看你拥有的作用范围是不是包含了目标资源, 另外看看缺不缺那些必要的权限标头。
看到429这个状态码, 你首先要去确认一下, 自己发起请求的频率是不是已经超过了API所设置的限流阈值的一个具体数值是多少, 除此之外, 你还要仔细去查看HTTP响应里面那个名为Retry-After的头部字段的数值是多少, 以便从中获得一个建议你等待多长时间的具体建议。
通常来说, 这是网关层跟后台的沟通出了错, 得去检查后台程序的运行状态以及超时的相关设置。
当出现404但资源存在这种情况时, 你需要去核对URL路径的大小写是不是对的, 还要看尾部斜杠有没有问题, 最后也要检查一下路由注册是不是正确无误。
补充说明
部分厂商把私有状态码进行了扩展, 就像代码451那样的情况是有的, 去查询的时候需要你确认一下它是不是属于由IANA指定的标准编码;同样的一个状态码在不同开发框架里面默认的操作方式有可能是不一样的, 所以应当靠着框架本身的文档去做二次确认的工作;状态码仅仅只代表了响应层面上的具体信息, 想要完成完整的排查任务需要把响应体数据还有请求日志还有链路追踪数据综合在一起进行判断。


