当我使用 websocket 服务器(节点上的 socket.io)时,防火墙 kaspersky/avast 会阻止消息。
我们能做什么?
答案1
我可以 100% 地告诉你,例如 Avast 不仅会阻止 websockets,而且从我的 Socket.IO 应用程序中看到,它还会阻止 xhr-polling 和其他东西。
这简直令人无法接受,我甚至在 80 端口上测试过,但还是不行。真是个糟糕的软件。
编辑:这是防病毒软件阻止的端口列表(逝世于 2017-07-20)
答案2
防火墙的第一条规则是:它无法阻止它无法感知到的东西。
防火墙是否允许 TLS?如果是,则通过 WSS 而不是 WS 提供内容。
通常,WSS 客户端会向您打开 TLS 连接(来源)并向您发送此内容:
GET /demo HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: example.com Origin: http://example.com WebSocket-Protocol: sample
防火墙无法检测到它,因为它是通过 TLS 进行的。
HTTP-CONNECT-WSS 客户端将向您发送以下信息:
CONNECT example.com:443 HTTP/1.1 Host: example.com
防火墙将其视为另一个 HTTP-CONNECT-TLS 连接。(来源)
附注:由于无法识别 websocket 的中间代理,websocket 可能会失败缓冲连接即使防火墙没有阻止它。HTTP“彗星”流也是如此。
答案3
如果可能的话,您可以尝试使用端口 443(用于 https)。
答案4
许多 ISP 公司封锁 80 端口,以阻止其客户在家用电脑上托管网络服务器。
解除 ISP 对 80 端口的封锁可能超出了你的能力范围。
此外,就我而言,Avast 不是防火墙。