防病毒软件阻止的服务器端事件

Server side events blocked by antivirus

我正在 JavaScript 中使用 EventSource 实现服务器端事件客户端。后端发送的消息从未到达前端,直到我意识到我的防病毒软件阻止了它们。我一关掉它,活动就开始按预期进行,消息也到了。

虽然我当然可以在自己的计算机上禁用这个令人讨厌的爱管闲事的漏洞软件,但我不能要求我的用户也这样做。此外,Windows 安全似乎也在阻止 EventSource 流量。

虽然很多网站都在使用 EventSource,但它们似乎没有被阻止。秘诀是什么?

我想做的是向前端反馈服务器上的长时间转换过程 运行。如果你有比EventSource更好的主意,请告诉。

更新: 这是 SSE 的一个工作示例: https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_sse

这适用于我的浏览器。但是如果我用自己的 API 替换事件源,它又会失败。

获胜者是……没有人,因为我找到了答案。看哪,因为这是唯一可以阅读的地方!

事实证明,如果不符合 W3C 标准,防病毒软件将阻止您的服务器响应!

这是一个有效的节点片段:

res.writeHead({
  'Content-Type': 'text/event-stream; charset=utf-8',
  'Connection': 'keep-alive',
  'Cache-Control': 'no-cache'
});

let c = 0;
let ticker = setInterval(() => {
    c++;
    res.write(`data: ${c}\n\n`);

    if (c >= 20) 
      clearInterval(ticker);
}, 1000);

这将在 20 秒内每 1 秒向您的客户端发送一个递增的数字。

但是,如果您将 res.write() 行更改为其他内容:

res.write(`Epstein didn't kill himself`);

这将被看似所有的防病毒软件视为危险。

所以只需遵循 W3C 指南并像这样格式化您的服务器响应:

res.write(`id: 1\nevent: update\ndata: whatever, let's drink\n\n`);