代理阻止 websockets?如何绕道

Posted

技术标签:

【中文标题】代理阻止 websockets?如何绕道【英文标题】:Proxy blocking websockets? How to get round 【发布时间】:2015-05-03 20:11:28 【问题描述】:

我有一个用 Python 编写的 websocket 服务器(来自https://github.com/opiate/SimpleWebSocketServer),当我尝试从我家连接到它时,它工作正常。但是,当我尝试从学校连接到它时,那里有一个网络代理,它无法连接并出现错误“未定义”。

我相信是代理停止了连接,但我不确定如何测试它是否确实如此。我该如何测试它,如果它是代理,我该如何解决这个问题?

谢谢

【问题讨论】:

据我了解,websocket 是 GET,然后是升级。代理将阻止升级部分,因为他们不知道如何处理它。在那里定义一个规则来告诉它在升级请求时做什么,websockets应该可以工作。 【参考方案1】:

许多代理服务器将 HTTP 请求的标头替换为自己的标头。他们将删除任何他们不理解的标头,因此当代理不支持 websocket 时,它将阻止任何 websocket 握手工作。

作为一种解决方法,您可以为您的网站获取 TLS 证书并使用 https 和 wss。这会加密标头,从而防止代理弄乱它们。

顺便说一句:无论如何你都应该支持 TLS。在当今世界,您不再需要有充分的理由使用加密,而是需要有充分的理由不使用。

【讨论】:

以上是关于代理阻止 websockets?如何绕道的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - 具有 WebSocket 代理和 SSL 支持的良好 WebServer?

neo4 WebSocket 连接到“ws://localhost:7687/”失败:通过代理服务器建立隧道失败

公共互联网何时(以及多久)会阻止 WebSocket 连接?

WebSocket 实战

WebSockets + PHP(棘轮)登录系统

Webflux,使用Websocket如何防止订阅两次反应式redis消息操作