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

5
我正在使用JavaScript中的EventSource实现服务器端事件客户端。我发现我的反病毒软件会阻止后台发送的消息到达前端,一旦关闭反病毒软件,事件便能按预期工作,消息也能送达。
虽然我可以在自己的电脑上禁用此恼人的防护软件,但我无法要求用户也这么做。此外,似乎Windows Security也会阻止EventSource流量。
许多网站都在使用EventSource,但它们似乎没有被阻止。有什么秘密吗?
我试图向前端提供关于运行在服务器上的长时间转换过程的反馈。如果您有比EventSource更好的想法,请告诉我。
更新:这里是SSE的工作示例:https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_sse 这在我的浏览器中可用。但是,如果我将事件源替换为自己的API,则又失败了。

1
你看到这个答案了吗:https://dev59.com/Hmcs5IYBdhLWcg3wSSDH#13135995?我从未使用过 EventSource,但我相信使用 WebSocket 可以实现你所需的功能,那为什么不用 WebSocket 呢? - tomer raitz
WebSocket 的输出无法限制在一个客户端上。除非进行加密,否则任何人都可以连接并查看流。 - Tamás Polgár
1个回答

2

胜者是...没有人,因为我找到了答案。瞧瞧,这是唯一一个你可以读到它的地方!

事实证明,如果你的服务器响应不符合W3C标准,杀毒软件会阻止它!

这里是一个工作中的Node代码片段:

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`);

1
有该标准/指南的链接吗? - widyakumara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接