ssl - Chrome 中的 SSE 客户端在几秒钟后断开连接
问题描述
我有一个在 nginx 后面的 docker swarm 中运行的服务器(Golang)和一个使用 eventSource 订阅 sse-stream 的前端。当我在 Chrome 中打开前端时,它总是在几秒钟后断开连接。这是我尝试过的:
- 在本地运行后端和前端(没有 ssl):没问题,即使在 chrome 中连接也保持打开状态
- exec 进入服务器上的 docker 容器并使用 curl(没有 ssl):没问题,连接保持打开状态
- 在本地使用 curl 调用服务器 URL(使用 ssl):没问题,连接保持打开状态
- 使用 Firefox 打开前端(使用 ssl):没问题,连接保持打开状态
- 使用 Chrome 直接从后端打开 sse 流(使用 ssl)或打开使用 eventSource(使用 ssl)的前端:请求在几秒钟后断开连接(通常在 2-7 秒之间)
对于其他基于铬的浏览器(如勇敢),该行为与 chrome 中的行为相同。
控制台中记录的错误:
GET https://myserver.domain/ssl-topic net::ERR_NETWORK_CHANGED 200
我还发现了这个线程:net::ERR_NETWORK_CHANGED on Chrome on Https socket connection 这似乎描述了一个类似的问题,如果你使用 ssl,sse-connections 在 chrome 中不起作用。由于该线程的发布者还使用“动态”环境(Kubernetes),我怀疑 docker swarm 在请求打开时可能会在内部做一些事情,这会使 chrome 感到困惑。但由于它适用于 curl、Firefox 等。我不相信连接实际上被中断了,所以我真的不知道在哪里可以查看或如何解决这个问题。
解决方案
推荐阅读
- excel - 如何加入单词“Sheet”和整数以形成工作表代号
- c - 在不使用 strtok 的情况下返回 c 中的剩余字符串
- java - 如何从 Spotify API 获取访问令牌?[爪哇]
- laravel - Laravel 7 - Eloquent ORM 在使用一对一关系时从 2 个表中获取数据
- android - ViewPager2:监听 setCurrentItem() 完成
- java - 指令被跳过,这里有没有我没有看到的错误?
- javascript - 在 FireStore 中查询空字段
- java - Glassfish4:由于war文件中WEB-INF/lib/jackson-*.jar中的Java9 module-info.class而出现异常?
- python - Tensorboard 仅显示嵌入层的 8 个节点
- python - 你如何使用从`ImageFont.getmask`返回的`Image.core`?