You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express中间件返回5XX状态码时自动重试问题咨询

问题原因分析

这种重试行为不是Express本身的机制,而是来自客户端/代理的HTTP重试策略,核心逻辑如下:

  • 5XX状态码属于「服务器端错误」,代表服务器临时故障、处理失败但可能下次能成功。对于幂等请求(比如GET、HEAD、PUT、DELETE这类重复执行不会改变服务器状态的请求),绝大多数HTTP客户端(浏览器、curl、反向代理/负载均衡器)都会默认发起重试,期望服务器恢复正常后能处理成功。
  • 4XX状态码属于「客户端错误」,代表请求本身有问题(比如参数错误、权限不足),重试也无法解决问题,所以客户端不会发起重试。

结合你的代码来看:
你的请求是GET /,属于典型的幂等请求。当错误处理中间件返回500时,客户端收到服务器错误的响应,就会自动重试这个GET请求,导致你的M1中间件被重复执行1-2次;而返回400时,客户端识别是自己的请求问题,不会重试。

验证方法

  • 用curl -v http://localhost:9000发起请求,查看日志里是否有多次请求记录
  • 把请求改成POST(非幂等请求),即使返回5XX,客户端也不会重试——因为重复POST可能会产生重复的资源变更

内容的提问来源于stack exchange,提问作者LifeIsButifool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:32:37