我有一个接受 text/event-stream
的端点,它基本上发送两种不同类型的事件:stats
和 result
。当服务器发送result
事件并关闭连接时。
问题是由于 sse 的设计,浏览器会重试连接。为了防止这种情况,我将重试值设置为更高的数字,例如 60000,并在客户端获得结果时关闭连接。
问题是如果延迟很高,Chrome 会向服务器发送多个请求(它在本地主机上没有问题)。 Safari 和 Firefox 可以正常工作。在 Chrome 中,网络选项卡上只有一个请求,因此我认为 Chrome 不会因为请求超时而尝试连接服务器。它也不会因为发送第二个请求而等待服务器关闭第一个请求。什么可能导致 Chrome 中出现此问题?
注意:服务器发送请求的端点和来源是不同的。对于正常的 HTTP 请求,Chrome 会另外发送 OPTIONS 请求以找出权限,但对于 SSE,它不会发送 OPTIONS 预检请求,但我不确定这是一个问题,因为 SSE 是一个 GET 请求。
最佳答案
此问题是由 Google Data Saver 扩展引起的。我没有检查请求是否来自 Google 的服务器,或者只是浏览器再次触发相同的请求,但禁用该扩展程序解决了问题。
关于javascript - 阻止 Chrome 发送多个服务器发送的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39252148/