【问题标题】:Server Side Events / Chrome Errors服务器端事件/Chrome 错误
【发布时间】:2021-04-24 20:54:48
【问题描述】:

每隔几分钟我就会在 Chrome 和 Firefox 上遇到控制台错误,但事件仍在发生 - 这种情况会持续一段时间,直到最终 Chrome 记录 520 错误并且 Firefox '无法建立与服务器的连接' 导致事件源完全中断。

我在本地对此进行了测试,两种浏览器都没有问题。我们生产环境的不同之处在于我们支持 nginx 代理和 CloudFlare 安全性。

这些是我在后端使用的标头:

  'Connection': 'keep-alive',
  'Content-Type': 'text/event-stream',
  'Cache-Control': 'no-cache',
  'X-Accel-Buffering': 'no'

这是后端(节点JS)中的代码

res.writeHead(200, headers);
res.setTimeout(1000 * 60 * 120)
res.flushHeaders()
req.on('close', () => {      
  res.end()
})
res.on('timeout', () => res.end())

这些是我尝试过的 nginx 配置:

proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
http2_max_field_size 64k;
http2_max_header_size 512k;
proxy_read_timeout 12h;

前端代码

 let source = new EventSource('/events')
 source.onerror = (e) => console.log(e)
 source.onmessage = (msg) => console.log(msg)

Chrome 控制台:

感谢任何建议。谢谢

Firefox 控制台:

【问题讨论】:

  • 520 是cloudflare specific error,firefox 和 chrome 处理它的方式不同,因为它不完全是标准的。我还看到 http2,cloudflare 有一些有趣的 http2 支持,所以可能需要检查 cloudflare http2 设置并确保了解和支持 cloudflare 和 nginx 之间的 http 版本。意思是什么时候是http1,什么时候是https2,有时只能降级,有时只能升级

标签: google-chrome nginx eventsource


【解决方案1】:

我自己经历过这个,结果证明是由 CloudFlare 代理引起的。似乎 CloudFlare 会在一段时间后终止连接。

要解决此问题,只需关闭 CloudFlare 代理,如下所述:https://docs.readme.com/docs/turn-off-cloudflare-proxy

确保创建一个子域,这样您就不会为整个网站禁用代理。

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2011-05-27
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多