背景
如果你正在开发跟AI会话或者执行流程可观测或者应为其他原因用到SSE方案。且你可能遇到了SSE在通过前端代理后或者上线到环境上SSE同步返回的问题;以下我遇到的问题可能会帮助到你;
问题和解决方法
- 在本地开发中,经过本地代理,我们发现会话接口总是在整个流程跑完后将信息一次性全部返回;可以尝试让后端同学设置如下http头部;
'Cache-Control': 'no-cache, no-transform'
- 本地开发完成,我们上线,发现开发时候遇到的问题又在线上出现,排查因为接口是nginx代理原因;所以如下解决了问题:
proxy_buffering off;
通过方法解释原因
no-transform:
不得对资源进行转换或转变。Content-Encoding、Content-Range、Content-Type等 HTTP 头不能由代理修改。例如,非透明代理或者如Google's Light Mode可能对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。no-transform指令不允许这样做。
proxy_buffering off:
如果proxy_buffering被关闭了,那么响应body会按照获取body的多少立刻同步传送到客户端。
结论
通过解决方法,其实都是执行链路上对响应做了处理,导致SSE没有及时返回到请求方; 祝你第一时间解决bug;祝你没有bug。