防病毒软件阻止的服务器端事件
Posted
技术标签:
【中文标题】防病毒软件阻止的服务器端事件【英文标题】: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 替换事件源,它又会失败。
【问题讨论】:
你看到这个答案了吗:***.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`);
【讨论】:
上述标准/指南的链接?以上是关于防病毒软件阻止的服务器端事件的主要内容,如果未能解决你的问题,请参考以下文章