← [ BACK_TO_NOTES ]

专题归档 · 2026 年 3 月(编辑分组,非实际写作日期)

MemoFlow:SSE 的 401,最后查到了 Express 中间件顺序

Express SSE 连接返回认证错误时,从路由栈与中间件顺序找问题。

一开始看上去是令牌问题

历史排障记录里,浏览器 SSE 请求不断拿到 401 Unauthorized,而负责 SSE 的专用认证逻辑却没有留下预期的日志。最初排查过令牌是否过期、请求路径是不是写错;单凭 401,无法知道它究竟被哪一层拒绝。

当时沿调用路径加了日志:请求到了应用入口,也进入了 API Router,却没有进入 SSE 路由。这个差异比反复调整客户端令牌更有定位价值。

真正值得查的是路由栈

打印 Express 注册栈后,发现 SSE 具体路径之前存在空路径挂载的 Router,以及更早执行的认证中间件。空路径挂载可能覆盖大量子路径;Express 按注册顺序运行中间件,前面的认证策略先返回 401,后面的 SSE Router 根本没有机会处理请求。

修复记录有两项:把具体的 SSE 路由放到相应认证链路之前;将不应该拦截所有路径的空挂载 Router 调整到末尾。原记录包含重启后路由栈和请求日志,说明判断有调试依据。

和“连上了却收不到事件”是两件事

这里排的是请求根本没有到达 SSE Handler,不是流建立后被反向代理压缩或缓冲的问题。后者已经另有一篇 SSE 压缩与缓冲排障草稿,不应因为表面都叫“通知失败”就混为一个根因。

安全边界: 原系统曾探索过 EventSource 受限时的令牌传递方式;本篇不复述真实请求 URL 或 Token,也不把历史实现视为今天的身份认证最佳实践。

创建于 2026/3/5 更新于 2026/10/17
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本