27 lines
1.4 KiB
Markdown
27 lines
1.4 KiB
Markdown
|
|
# [OPEN] debug-socket-polling-400
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
- 生产环境后台页持续出现 Socket.IO polling 400。
|
|||
|
|
- 浏览器控制台可见大量:
|
|||
|
|
- `GET /socket.io/?EIO=4&transport=polling&sid=... 400`
|
|||
|
|
- `POST /socket.io/?EIO=4&transport=polling&sid=... 400`
|
|||
|
|
- 同时存在无关但可观察现象:
|
|||
|
|
- `vue.global.js` 开发版提示
|
|||
|
|
- `/favicon.ico` 404
|
|||
|
|
|
|||
|
|
## 已知现象
|
|||
|
|
- 首次 `polling` 握手能拿到 `sid`,后续带 `sid` 的轮询请求失败。
|
|||
|
|
- 失败后客户端持续重连,表现为“连接一下又断开”。
|
|||
|
|
|
|||
|
|
## 初始假设
|
|||
|
|
- 假设 1:反向代理或负载均衡未做会话保持,导致同一个 `sid` 的后续请求落到不同后端实例。
|
|||
|
|
- 假设 2:CDN/边缘代理对 `/socket.io/` 的长轮询处理不稳定,导致 `sid` 生命周期被中断。
|
|||
|
|
- 假设 3:客户端当前传输策略触发了不兼容的重连路径,反复创建新 `sid` 又迅速失效。
|
|||
|
|
- 假设 4:服务端 Engine.IO 对同一会话的请求顺序或超时异常敏感,导致后续 `GET/POST` 被判无效。
|
|||
|
|
- 假设 5:`vue.global.js` 开发版提示和 `favicon.ico` 404 只是噪音,不是 Socket.IO 400 的主因。
|
|||
|
|
|
|||
|
|
## 当前计划
|
|||
|
|
- 先继续收集线上现成证据,不改业务逻辑。
|
|||
|
|
- 对比首次握手与后续 `sid` 请求是否稳定落到同一服务链路。
|
|||
|
|
- 若证据仍指向服务端/代理层,再决定是否做最小客户端降级或服务端兼容修复。
|