同じ問題を実行している他の誰かのためにこれを投稿します。
私は、stanza.ioを使用してXMPPサーバー(私の場合はProsody)に接続するブラウザークライアントで作業していました。デフォルトではwss://接続を使用していました。開発中のある時点で、私のクライアントはまったく接続に失敗しました-どんな種類の有用なエラー情報も提供せずに、すぐに静かに切断します。
エラーログ、エラーコード、確認ダイアログまたはバー、何が問題であるかの兆候はありませんでした。
数時間のデバッグの後、私は最終的に問題を見つけました。 XMPPサーバーの構成をいじっていたため、XMPPdのSSL証明書を再生成しました。私は自己署名証明書を使用していたため、これによりSSLエラーが発生しました。以前に同じURIをHTTPS経由でアクセスしたことがあるため、古い自己署名証明書を既に手動で承認していましたが、SSL証明書の再生成後は明らかに承認が無効になりました。
問題の鍵は次のとおりです。SSL証明書が何らかの警告を引き起こす場合、wss://
WebSocket接続はすぐに失敗し、これを検出する標準的な方法はありません。
上記のように、この問題が発生していることを検出する標準化された方法はないようです単独で解決しましょう。私が見つけたこの問題の最良の解決策は次のとおりです。
ws://
(SSLなし)接続を試行してください。target="_blank"
URLへのwss://
リンクを提供しますが、プロトコルをhttps://
に置き換えます。これはProsody固有のものかもしれませんが、そのURLにアクセスすると、SSL警告ページが表示されます。 Prosodyは「It works!」で始まるテキストを表示します証明書を承認した後-サーバー側がカスタムアプリケーションである場合、「問題が解決されました。このタブを今すぐ閉じることができます」というメッセージを表示する必要があります。UXに関してはスムーズなプロセスとはほど遠いですが、私が見つけた最もスムーズなアプローチです。エラーページをiframeすることはできません(これは私の最初のアイデアの1つでした)-Chromeはロードをまったく拒否し、Firefoxは[例外の追加]ボタンを非表示にします。 d他のブラウザが同様の動作をすることを想像してください。
最新のブラウザは自己署名証明書を好まないことに注意してください。したがって、安全なWebSocket
接続がハンドシェイクを終了する前に停止した場合、証明書が受け入れられていないことを意味する可能性があります。問題を解決するために、次のことができます。