发表此文是为了帮助遇到同样问题的人。
我正在开发一个浏览器客户端,使用stanza.io连接到一个XMPP服务器(在我的情况下是Prosody)。我默认使用了wss://连接。在开发过程中的某一点上,我的客户端根本无法连接 - 它会立即默默地断开连接,没有提供任何有用的错误信息。
没有错误日志,没有错误代码,没有确认对话框或状态栏,也没有任何可能出错的迹象。
wss://
WebSocket连接将立即失败,并且没有统一的方法来检测此问题。
如上所述,似乎没有标准化的方法来检测此问题是否正在发生,更不用说解决它了。我能够找到的最佳解决方案如下:
ws://
(没有SSL)连接。target="_blank"
链接到wss://
URL,但将协议替换为https://
。这可能是特定于Prosody的,但通过访问该URL,您将看到SSL警告页面。 Prosody在批准证书后会显示以“It works!”开头的文本 - 如果服务器端是自定义应用程序,则应显示一条消息,指出“问题已经解决,现在可以关闭此选项卡”。 从用户体验角度来看,这并不是一个很流畅的过程,但这是我找到的最流畅的方法。无法在iframe中加载错误页面(这是我的第一个想法之一)- Chrome将拒绝完全加载它,Firefox将隐藏“添加异常”按钮,我想其他浏览器也会表现出类似的行为。
请记住,现代浏览器不喜欢自签名证书。因此,如果您的安全WebSocket
连接在握手结束之前中断,可能意味着证书未被接受。
openssl req ... -nodes
命令中使用 -nodes
选项,否则生成的密钥文件将会被加密,服务器无法读取 key.pem
文件。 - Asad-ullah Khan