HTTP状态码这个东西其实就是服务器发给客户端的一个回应标识, 它是由三个数字组成的那个样子, 主要的作用就是用来告诉别人你的请求处理得到底怎么样了, 然后那些搞开发的人, 还有运营维护的人员以及管理网站的工作人员, 在面对故障需要去排查问题的时候, 他们首先需要去确认这个状态码到底是什么意思, 之后才能再去把具体是什么原因造成的定位出来, 这篇文章把完整的HTTP状态码的分类体系全都整理好了, 同时也准备了高频出现的那些码数的快速查阅方法, 这样的设计就是可以帮助你在30秒钟以内就可以完成任务并且完成定位。

状态码五大分类

1xx(信息类): 表示服务器已经接收到了请求, 但是处理工作还没有做完。拿100 Continue这个例子来说, 它的意思是告诉客户端, 你可以继续把后面的数据发过来。

2xx(成功类):这是说明请求已经被成功处理的代码, 其中最通用的响应状态是 200 OK,当资源被创建时HTTP状态码查询工具, 会返回 201 Created, 而如果是操作已经成功执行, 但是服务器没有返回任何内容的情况, 则会显示 204 No Content。

*3xx(重定向类):表示的是资源的位置已经发生了变化,这时候需要客户端来进行进一步的操*作。其中HTTP状态码查询工具,*301 代表的是永久性的重定向龙南市就业服务平台, 而302 则表示临时的重定向情况。

如果返回的是304 以及 Not Modified* 这样的信息, 它的意思是资源内容没有发生变动, 在这种情况下, 客户端完全可以直接使用存放在本地的缓存数据。

4xx(客户端错误): 请求本身存在问题, 是日常排查当中出现频率非常最高的一类情况。

这个叫做400 Bad Request的提示, 它的意思是说请求的语法出现了错误。

401 Unauthorized:未提供有效认证凭据

这个提示说是一个编号为403的禁止访问情况, 它的意思是用户已经通过了身份认证, 但是这个系统现在拒绝让这个用户来访问相关的资源。

返回的是错误代码404, 这说明目标资源不存在。

405 Method Not Allowed:请求方法不被资源支持

状态码是409, 具体意思是资源的状态存在冲突。

出现了429 状态码, 意思是太多个请求了, 这个情况是因为触发了频率限制的机制。

服务端错误是5xx这个代码, 表示服务器自己出了内部故障:

HTTP状态码查询工具|500、404、403常见码含义与排查方法(图1)

出现了五百个内部服务器错误, 就是发生了一个没有预料到的情况, 导致系统内部出现异常。

这是一个HTTP错误, 代号是502并且标题是Bad Gateway, 这个信息告诉我们上游服务器返回了无效的响应。

出现了503 Service Unavailable这种情况, 意思就是服务现在临时没有办法正常工作, 可能是因为正在搞维护, 或者是系统压力 overload 太大了。

这个错误显示为504 Gateway Timeout, 意思是上游服务器没有在规定时间内给出回应。

高频状态码排查要点

404: 你要去查看一下那个网址的拼写对不对, 检查一下网站的路由设置是不是有问题, 还要确认一下需要的文件是不是真的已经放到了该在的地方。

403:要对权限配置情况进行核对, 还要对防火墙规则进行核对, 另外也要把鉴权中间件逻辑给搞清楚。

401与403区别: 401的意思是, 用户没有登录, 或者提交的凭据是无效的。 403的意思是, 用户已经完成了登录操作, 但是当前这个用户没有权限去访问被请求的某个资源。

500:请去看应用日志里面记录的异常堆栈信息, 这里重点要去查看有关数据库连接的状况, 另外还要去检查那些被依赖的服务是否还可以正常地使用。

502/504: 大家去看看那个反向代理, 比如Nginx或者ALB之类的配置到底是怎么回事, 同时也要看看上面那个服务进程的当前状态。

使用工具快速定位

你首先要在浏览器的开发工具当中的网络连接面板, 或者是在服务器的访问日志里面, 把那个状态码给拿到手, 然后, 就可以用专门的查询HTTP状态码的工具, 把这个状态拆开每一位然后来解读它是什么意思, 同时还能看到这个状况推荐什么样的处理方式才能解决掉这个问题, 比如说你可以去访问一下gz88.cn这个网站, 到了那里之后就能看到专门的状态码查询页面了, 你在那里面把手里拿着的具体数字输进去, 然后那个查询工具就会立刻返回给你的结果里有关于这个数字的标准定义, 还有大家经常碰到的触发这个状态的场景是哪些, 以及针对这些情况应该对应的进行排查的步骤是什么样的。

这样就不需要你去费力记忆那些复杂的知识点了, 也能做到非常快速地找到问题的根源在哪了。

上叙的这些内容, 基本上是把日常在进行开发和运行维护过程中, 所需要面对的状态码的场景, 绝大部分都给覆盖到了, 也就是超过了百分之九十的数量。

那么如果在实际工作中碰见了那些不属于标准范畴的、由厂商自己进行扩展出来的状态码代码, 比如像那些数值超过了一千零二十四的这种自定义类型的代码的话, 我们就去查阅一下对应的那个框架或者网关的官方所出具的文档, 来确认这些特定代码的具体含义到底是什么情况。