HTTP 状态码是服务端对「这次请求结果」的标准化摘要。写前端、做网关、做安全测试时,都要能从状态码判断:问题在客户端、权限、资源,还是服务端。下面按类别把最常见的码讲清楚。

1xx 信息性(少见)

表示临时响应,如 100 Continue。日常业务代码很少直接处理。

2xx 成功

含义备注
200 OK成功,响应体通常含资源最常见
201 Created创建成功REST POST 常用,带 Location
204 No Content成功但无正文DELETE 常见

3xx 重定向

含义注意
301永久重定向SEO/缓存会记新地址
302临时重定向历史语义含糊,见下
303看其它 URI(通常 GET)POST 后 PRG 模式
304缓存未修改配合条件请求
307/308严格保留方法的重定向比 302/301 更清晰

旧笔记写「302:找到,但资源在另一个 URL」——方向对,但不完整。安全上要关注 开放重定向:若 Location 可被参数控制,会变成钓鱼跳板。

4xx 客户端错误

含义常见原因
400请求无法理解参数/JSON 坏了
401 Unauthorized未认证缺/错凭证;名称历史包袱,实际是 authentication
403 Forbidden已认证但不许权限不足;也可能未登录却统一返回 403
404 Not Found无此资源路径错或故意隐藏
405方法不允许GET/POST 用错
409冲突版本冲突、重复创建
429太多请求限流

安全测试里:

5xx 服务端错误

含义
500通用内部错误
502网关上游坏了
503不可用(过载/维护)
504网关超时

对调用方:5xx 适合重试(要退避);4xx 多数不该盲目重试。

客户端处理建议

2xx -> 解析业务 body
3xx -> 跟随或暴露给上层(注意循环与跨域)
401 -> 走登录/刷新 token
403 -> 提示无权限,不要当「再试一次密码」
404 -> 资源不存在 UI
429 -> 指数退避
5xx -> 有限次重试 + 熔断

小结

状态码是协议层契约,不是错误文案本身。写 API 时 语义正确比全部 200 包业务码更重要;做测试时则要结合 body、头字段一起看,单独一个 302 远远不够下结论。

安全测试视角的再分类

观察可能含义
同资源 401/403 切换认证与授权实现细节、用户枚举面
403 与 404 混用路径隐藏策略是否一致
302 到外域开放重定向风险
全站 200 + 业务码监控与 WAF 可能失灵
大量 429限流存在,可测绕过或分布式

网关与微服务

边缘网关应保留真实上游状态码,或规范化时在日志中保留原始码。否则排障时「全是 502」会浪费数小时。

小结

状态码是协议契约,也是安全信号。写 API 时语义正确;做测试时结合 body、头与时间差,不单看一个三位数。

监控告警建议

把状态码纳入 SLI,而不只看延迟与 CPU。

延伸阅读与实践

把文章里的命令和配置放到自己的实验环境跑一遍,比只看结论更重要。建议同步记录:环境版本、失败现象、最终生效的配置。下次遇到同类问题时,检索自己的笔记往往比搜引擎更快。

若该主题涉及安全测试,请仅在明确授权的系统或官方靶场中操作,并保留测试范围与时间窗记录,避免对生产造成误伤。

对团队分享时,用「问题—影响—修复—验证」四段结构复述,有助于把个人经验沉淀为组织能力。