在各种多层复杂网络架构中,一次用户请求需要历经多道链路节点。一旦出现访问失败,如何快速定位故障究竟出在哪个环节?

4xx 通常告诉你:哥们,走错门了,你没权限。

5xx 则在咆哮:别看我了,是后面的问题,不是服务器扛不住就是程序出问题了。

http 状态码

读懂并活用 HTTP 状态码,是网络故障排查从凭感觉猜走向按逻辑定位的关键一步。

  1. 1xx 信息提示(Informational)

此类状态码代表请求已正常接收,服务端正在持续处理。日常业务排查中较少遇到,但在高性能网络调优场景中至关重要。

  • 100 Continue 客户端上传大文件等大数据包时,会先仅发送请求头试探服务端;若服务端允许接收,返回 100 状态码,客户端再传输请求主体,以此节省无效带宽消耗。
  • 101 Switching Protocols 常用于 WebSocket 握手场景。告知客户端已完成协议升级,从 HTTP/1.1 切换为 WebSocket 协议;抓包时看到 101,即代表长连接链路已成功建立。
  1. 2xx 请求成功(Success)

最理想的响应状态,标识请求已被服务端正常处理并返回结果。

  • 200 OK 最通用的成功状态码,请求处理完成,完整返回响应头与响应主体。
  • 201 Created 多用于 RESTful 接口,调用 POST 请求新增资源(如创建用户、新增数据条目)成功时返回。
  • 204 No Content 请求执行成功,但响应无实体内容。常适配 DELETE 删除操作,告知客户端已完成删除,无需页面回显。
  • 206 Partial Content 断点续传、视频流媒体播放的核心状态码。客户端请求携带 Range 请求头,服务端仅返回指定区间内容;若下载工具不支持 206,大文件中断后只能从头重新下载。
  1. 3xx 资源重定向(Redirection)

多用于域名迁移、协议跳转、缓存协商等场景,同时关联网站性能优化与 SEO 配置。

  • 301 Moved Permanently 永久重定向 适用于域名更换、HTTP 强制跳转 HTTPS 等永久场景。搜索引擎会迁移原 URL 权重,浏览器会自动缓存跳转规则。
  • 302 Found 临时重定向 常用于活动页面跳转、未登录自动跳转到登录页等临时场景。浏览器不缓存跳转,搜索引擎也不会转移页面权重,日常业务中极易被滥用。
  • 304 Not Modified 协商缓存 并非报错!客户端携带缓存标识询问服务端资源是否更新,服务端比对后判定资源无变动,返回 304 状态码。可大幅节省带宽、提升页面加载速度,网站访问卡顿可优先排查 304 缓存命中率。
  1. 4xx 客户端错误(Client Error)

故障根源集中在客户端、前端请求层面,排查时多需对接前端开发协同定位。

  • 400 Bad Request 通用客户端错误,常见原因:前端请求参数格式非法、请求头超长超出服务器配置限制。
  • 401 Unauthorized 未完成身份认证,需进行基础鉴权(区别于业务系统登录逻辑)。
  • 403 Forbidden 无访问权限,常见诱因:服务器文件权限未配置、WAF 防火墙 IP 黑名单拦截、站点禁止目录列表访问。
  • 404 Not Found 经典状态码,请求访问的资源路径不存在。出于安全防护,服务器常以 404 替代 403,避免恶意攻击者探测敏感目录结构。
  • 405 Method Not Allowed 请求方式不匹配,如接口仅支持 POST 请求,客户端却使用 GET 方式调用。
  • 429 Too Many Requests 触发接口限流防护,多为脚本、爬虫请求频率过高,被 Nginx 限流规则拦截。
  1. 5xx 服务端错误(Server Error)

网络运维最常遇到的故障类型,问题集中在网关、后端服务、数据库等服务端链路。

  • 500 Internal Server Error 服务端通用异常,后端程序逻辑报错,如空指针异常、数据库连接失败、代码语法错误等。
  • 502 Bad Gateway 网关错误 由 Nginx 等反向代理节点抛出,代表后端应用服务(PHP-FPM、Tomcat、Gunicorn)宕机、重启或异常,代理无法连通后端服务。
  • 503 Service Unavailable 服务器负载过载、站点维护停机,属于临时不可用状态,通常搭配 Retry-After 响应头告知重试时间。
  • 504 Gateway Timeout 网关超时 后端服务仍在运行,但处理请求耗时过长(如慢 SQL 查询),超出 Nginx 配置的  proxy_read_timeout  超时阈值,需优化业务代码与数据库性能。
  1. 非标高频自定义状态码

除标准 RFC 规范状态码外,Nginx、Cloudflare 等常用组件还有专属自定义状态码:

  • 499(Nginx 专属) 客户端主动断开连接,多因后端请求处理缓慢,用户等待超时刷新页面导致。
  • 521(Cloudflare 专属) 源站 Web 服务器拒绝 Cloudflare 节点连接。

高效捕获与分析状态码

理解含义之外,更要掌握快速排查的实用方法:

  • 浏览器 F12:打开 Network 网络面板,直观查看接口请求状态码与响应详情;
  • Curl 命令: curl -I https://example.com 仅查看接口响应头,快速校验状态;
  • Wireshark 抓包:网络层深度排查,过滤规则http.response.code == 502精准筛选异常请求;
  • Nginx 日志统计:awk '{print $9}' access.log | sort | uniq -c | sort -rn ,一键统计日志中各类异常状态码占比。

专业网络工程师无需死记硬背状态码,只需结合请求发起-链路转发-服务处理-结果响应全链路逻辑理解即可。

类别 范围性质 建议
1xx 100-199 过程性了解 WebSocket 即可
2xx 200-299 成功重点关注 206
3xx 300-399 重定向搞清 301/302 区别,重视 304
4xx 400-499 客户端错排查参数、权限、路径

精简速记版(日常排查够用):

  • 200:请求成功
  • 301/302:页面跳转
  • 304:命中缓存
  • 400:请求参数错误
  • 401:未身份认证
  • 403:无访问权限
  • 404:资源不存在
  • 429:触发接口限流
  • 500:服务程序异常
  • 502:后端网关失联
  • 504:后端处理超时

本文修改自:https://mp.weixin.qq.com/s/O5_NBzmF69Vw4qOwpemREQ