SSE 走 Cloudflare 代理,超过 100 秒的生成任务稳定返回 524,原文 A timeout occurred,源站日志显示请求还在正常输出,客户端在 100 秒整收到连接关闭。

这类报错背后常见的原因有几处,逐个排除就行。免费与 Pro 套餐的回源超时固定 100 秒;响应首字节没有及时输出 被判为挂起;长连接没走 WebSocket 按普通 HTTP 计时;企业版之外的套餐改不了这个超时。

动手时先绕过 CDN 直接验证源站时长

curl -N -m 300 https://origin.example.com/stream

量一次首字节时间

curl -N -o /dev/null -w '%{time_starttransfer}' https://api.example.com/stream

随后把长任务改成异步先返回任务号

python -c "print('202 with task_id')"

需要长连接时改走 WebSocket 或直连子域

python -c "print('use ws or bypass cdn')"

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

别只看报错消失,验证要多做一步。长任务在 CDN 侧返回 202 并带任务号,客户端轮询拿到结果,524 不再出现。

这里还有个坑。524 是边缘等源站超时,源站再快也没用,长任务要么拆短要么改异步,别在这一层死磕配置。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189