针对遇到同样问题的其他人发布此内容。
我正在使用stanza.io连接到XMPP服务器的浏览器客户端(在我的例子中是Prosody)。我默认使用的是wss://连接。在开发期间的某个时刻,我的客户端根本无法连接 - 它会立即静默断开连接,而不会提供任何有用的错误信息。
没有错误日志,没有错误代码,没有确认对话框或条形图,也没有可能出现错误的迹象。
答案 0 :(得分:33)
经过几个小时的调试,我终于找到了问题;因为我正在搞乱我的XMPP服务器的配置,所以我重新为XMPPd生成了SSL证书。由于我使用的是自签名证书,因此会导致SSL错误。因为之前我曾通过HTTPS访问过相同的URI,所以我已经手动批准了旧的自签名证书 - 但很明显,在重新生成SSL证书后,批准不再有效。
问题的关键在于:如果您的SSL证书导致任何类型的警告,wss://
WebSocket连接将立即失败,并且没有规范的方法来检测它。
如上所述,似乎没有标准化的方法可以检测到这个问题正在发生,更不用说解决它了。我能找到的这个问题的最佳解决方案如下:
ws://
(不带SSL )连接到非SSL端口。< / LI>
target="_blank"
网址的wss://
链接,但将协议替换为https://
。这可能是特定于Prosody的,但通过访问该URL,您将看到SSL警告页面。 Prosody将显示以“It works!”开头的文本。批准证书后 - 如果服务器端是自定义应用程序,则应显示一条消息,说明“问题已解决,您现在可以关闭此选项卡”。这远不是一个平稳的过程,用户体验,但它是我发现的最顺畅的方法。 iframe错误页面是不可能的(这是我的第一个想法) - Chrome将拒绝加载它,Firefox将隐藏“添加例外”按钮,我想其他浏览器会表现出类似的行为。< / p>
答案 1 :(得分:2)
请记住,现代浏览器不喜欢自签名证书。
因此,如果您的安全elem.addEventListener('touchstart', function(e) {
e.preventDefault();
});
连接在结束握手之前死亡,则可能意味着证书尚未被接受。
为了解决这个问题,您可以:
答案 2 :(得分:0)