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

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

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

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

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

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

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

【问题讨论】:

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

标签: javascript antivirus


【解决方案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`);

【讨论】:

  • 上述标准/指南的链接?
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多