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

Posted

技术标签:

【中文标题】防病毒软件阻止的服务器端事件【英文标题】:Server side events blocked by antivirus 【发布时间】:2020-09-03 04:31:31 【问题描述】:

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

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

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

我正在尝试向前端提供有关服务器上运行的长时间转换过程的反馈。如果您有比EventSource 更好的想法,请告诉。

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

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

【问题讨论】:

你看到这个答案了吗:***.com/a/13135995/10055871?我从未使用过EventSource,但我相信使用WebSocket 您可以完成您需要的工作,那么为什么不使用WebSocket WebSocket 输出不能仅限于一个客户端。任何人都可以连接并查看流,除非它是加密的。 【参考方案1】:

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

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

这是一个工作节点 sn-p:

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

【讨论】:

上述标准/指南的链接?

以上是关于防病毒软件阻止的服务器端事件的主要内容,如果未能解决你的问题,请参考以下文章

正在运行的 Windows 服务阻止文件下载的防病毒软件

Windows:防止防病毒软件阻止桌面程序安装或运行

防病毒软件正在阻止 nodemailer - 错误:证书链中的自签名证书

为啥我的防病毒软件阻止我的代码执行...?

每次我们重新发布软件时如何阻止防病毒误报?

卡巴斯基防病毒软件阻止 Windows 的 Visual Studio 稳定版本下载