http状态码体系和相关经验汇总,给以后判断问题提供基础

401是 unauthorized,就是没登录,或者没带token。

场景一:之前遇到的应该是这样。比如前端什么要调用后端什么,发请求的时候没有带uac-token,或者带的token是错的,一般会报401. 在浏览器F12看那个报错,基本上可以大概率定位到是token 的问题,这个开发就可以解决了。

场景二:docker客户端往harbor push镜像的时候,会报这个401,一般就是没有docker login

403是forbidden,就是不让。就是知道你登录了,但是你这个账号没有权限。所以一般应该是要去看看权限配置的问题。

502 bad gateway,一般是网关NG这里的proxy pass的后端服务没启动,或者这个pass的endpoints不对。

503 service unavailable,服务不可用,但可以重试。一般是pod重启的时候,中间这一两分钟会这样。


详细补充说明

401 Unauthorized(未授权)

完整定义

401状态码表示请求缺少有效的身份认证凭据,或者提供的凭据无效。服务器无法识别请求者的身份。

常见原因
  1. 未登录:用户没有进行身份认证
  2. 未携带token :请求头中缺少认证令牌(如 Authorization: Bearer <token>
  3. Token错误
    • Token格式不正确
    • Token签名无效
    • Token已过期
    • Token被撤销或列入黑名单
  4. 认证信息错误:用户名/密码错误、API密钥错误等
实际场景补充
  • 前端调用后端
    • 未携带 uac-token 或其他认证头
    • Token过期需要刷新
    • Token格式错误(如缺少Bearer前缀)
  • Docker操作
    • docker push 到Harbor时未执行 docker login
    • 登录凭据过期
    • 没有访问仓库的权限
  • API调用
    • RESTful API调用时缺少认证头
    • OAuth token过期
    • JWT token无效
排查方法
  1. 检查浏览器F12 Network标签,查看请求头是否包含认证信息
  2. 检查token是否过期(查看token的exp字段)
  3. 验证token格式是否正确
  4. 确认是否执行了登录操作

403 Forbidden(禁止访问)

完整定义

403状态码表示服务器理解请求,但拒绝执行。与401不同,403表示身份认证已成功,但授权失败(没有权限访问该资源)。

常见原因
  1. 权限不足:用户已登录,但账号没有访问该资源的权限
  2. 角色限制:用户角色不允许执行该操作
  3. 资源限制:访问的资源被限制(如IP白名单、时间限制等)
  4. 文件系统权限:服务器文件系统权限不允许访问
与401的区别
  • 401:身份认证失败(不知道你是谁)
  • 403:身份认证成功,但授权失败(知道你是谁,但不允许你访问)
排查方法
  1. 检查用户角色和权限配置
  2. 查看RBAC(基于角色的访问控制)配置
  3. 检查资源访问策略
  4. 确认IP白名单、时间限制等规则
实际场景
  • 普通用户尝试访问管理员功能
  • 用户尝试访问其他用户的数据
  • API调用时token有效但权限不足
  • 文件系统权限不允许Web服务器访问

502 Bad Gateway(网关错误)

完整定义

502状态码表示作为网关或代理的服务器,从上游服务器收到无效响应。网关无法从上游服务器获得有效响应来完成请求。

常见原因
  1. 后端服务未启动:上游服务器(后端服务)没有运行
  2. Endpoints配置错误:网关配置的上游服务器地址不正确
  3. 后端服务崩溃:上游服务器进程崩溃或异常退出
  4. 网络问题:网关无法连接到上游服务器(网络故障、防火墙阻止)
  5. 超时:上游服务器响应超时
  6. 负载过高:上游服务器负载过高,无法及时响应
  7. 端口错误:配置的端口号不正确
网关场景(Nginx为例)
nginx 复制代码
# 如果proxy_pass指向的后端服务未启动,会返回502
location /api {
    proxy_pass http://backend-service:8080;
    # 如果backend-service:8080未启动,返回502
}
排查方法
  1. 检查后端服务是否运行(kubectl get podsdocker ps等)
  2. 检查网关配置的upstream/endpoints是否正确
  3. 检查网络连通性(ping、telnet测试端口)
  4. 查看后端服务日志,确认是否有错误
  5. 检查后端服务的健康检查端点
  6. 验证端口配置是否正确
实际场景
  • Kubernetes中Service的Endpoints为空(Pod未运行)
  • Nginx proxy_pass指向的服务未启动
  • 后端服务进程崩溃
  • 后端服务响应超时
  • 负载均衡器无法连接到后端服务器

503 Service Unavailable(服务不可用)

完整定义

503状态码表示服务器暂时无法处理请求,通常是由于临时过载或维护。这是一个临时状态,客户端可以稍后重试。

常见原因
  1. Pod重启:Kubernetes Pod正在重启,服务暂时不可用(通常1-2分钟)
  2. 服务维护:服务器正在进行维护或更新
  3. 负载过高:服务器负载过高,无法处理新请求
  4. 资源不足:CPU、内存等资源不足
  5. 依赖服务不可用:依赖的下游服务不可用
  6. 健康检查失败:服务健康检查失败,被标记为不可用
  7. 限流:服务达到限流阈值,暂时拒绝请求
与502的区别
  • 502:网关无法从上游获得有效响应(通常是配置或连接问题)
  • 503:服务本身不可用(通常是临时性问题,可以重试)
可重试性

503是临时状态,客户端应该:

  • 实现重试机制(指数退避)
  • 等待一段时间后重试
  • 不要立即重试,避免加重服务器负担
排查方法
  1. 检查Pod状态(kubectl get pods,查看是否在重启)
  2. 查看服务日志,确认是否有错误
  3. 检查资源使用情况(CPU、内存)
  4. 查看健康检查状态
  5. 检查依赖服务是否正常
  6. 查看是否有维护计划
实际场景
  • Pod重启:Deployment更新、Pod崩溃重启时,中间1-2分钟返回503
  • 滚动更新:Kubernetes滚动更新时,部分Pod不可用
  • 高负载:流量突增,服务器暂时无法处理
  • 维护模式:应用进入维护模式,返回503
  • 限流触发:达到限流阈值,暂时拒绝请求
最佳实践
  • 实现优雅关闭(Graceful Shutdown),减少503时间
  • 配置健康检查,确保服务就绪后再接收流量
  • 实现重试机制和熔断器
  • 监控服务可用性,及时发现问题

状态码快速参考

状态码 含义 是否可重试 常见原因
401 未授权 否(需重新认证) 未登录、token无效/过期
403 禁止访问 否(需权限) 已登录但无权限
502 网关错误 后端服务未启动、配置错误
503 服务不可用 是(临时) Pod重启、负载过高、维护中

排查流程建议

遇到401时

  1. 检查请求头是否包含认证信息
  2. 验证token是否有效(未过期、格式正确)
  3. 确认是否执行了登录操作
  4. 检查token刷新机制

遇到403时

  1. 确认用户已成功登录(不是401)
  2. 检查用户角色和权限配置
  3. 查看RBAC策略
  4. 验证资源访问规则

遇到502时

  1. 检查后端服务是否运行
  2. 验证网关配置的endpoints
  3. 测试网络连通性
  4. 查看后端服务日志
  5. 检查健康检查状态

遇到503时

  1. 检查Pod/服务状态
  2. 查看服务日志和资源使用
  3. 确认是否有维护计划
  4. 检查依赖服务状态
  5. 实现重试机制(客户端)

总结

这些状态码是HTTP协议中用于表示请求处理结果的重要标识。理解它们的含义和常见原因,可以帮助快速定位和解决问题:

  • 401/403:认证和授权问题,需要检查身份和权限
  • 502:网关配置或后端服务问题,需要检查服务状态和配置
  • 503:临时服务不可用,通常可以重试,需要检查服务状态和资源

在实际工作中,结合日志、监控和调试工具,可以更准确地定位问题根源。

相关推荐
额呃呃2 小时前
SIGALRM信号处理机制详解
网络·windows
小天源2 小时前
IP地址修改器
服务器·网络·tcp/ip
Godspeed Zhao2 小时前
现代智能汽车中的无线技术23——Wi-Fi(11)
网络·汽车·智能路由器
三两肉2 小时前
HTTP/2 特点解析,从 HTTP/1.1 的痛点到新一代协议的进化
网络·网络协议·http·http2
yuanmenghao2 小时前
车载Linux 系统问题定位方法论与实战系列 - OOM 与资源耗尽:系统是如何被“慢慢拖死”的
linux·运维·服务器·网络·驱动开发·自动驾驶
独行soc2 小时前
2026年渗透测试面试题总结-2(题目+回答)
android·java·网络·python·安全·web安全·渗透测试
爱学java的ptt2 小时前
AQS简单源码思路和手撕实现
java·网络
楠目2 小时前
HTTPS原理详解
网络·http
@CLoudbays_Martin113 小时前
SDK游戏盾的工作原理具体是怎么完成防护的?
服务器·网络·安全·游戏