Firefoxで立ち往生しています。 Websocketを動作させることができませんでした。 Tornado Websocketを使用し、以下のコードで初期化しました。
app = Application([(r'/mypath/ws', WSHandler)])
http_server = HTTPServer(app, ssl_options={
"certfile": "~/certs/websocket.crt",
"keyfile": "~/certs/websocket.key"
})
http_server.listen("443")
そして、私はそれを次のようにJavascript側で初期化しました:
var WS = new WebSocket("wss://websocket.localhost/mypath/ws");
このコードはChromeで正常に機能しますが、自分で証明書を作成し、HTTPSでページを実行しました。しかし、Firefoxは次のように言い続けています。
Firefox can't establish a connection to the server at wss://websocket.localhost/mypath/ws.
私はそれをグーグルで検索し、あまりにも多くの考えを見つけましたが、どれも私のために働きませんでした:(
どんな助けでもありがたいです。
ProxyPassを介して問題を解決しました。 Tornadoを使用して安全でないWebsocketサーバーを作成し、3232などの特定のポートで実行しました。
app = Application([(r'/ws/', WSHandler)])
ws_server = HTTPServer(app)
ws_server.listen("3232")
次に、Apache confにプロキシパスを記述し、mod_proxy_wstunnelを使用します。
ProxyPass /ws/ ws://127.0.0.1:3232/ws/
ProxyPassReverse /ws/ ws://127.0.0.1:3232/ws/
そして、私は次のようにフロントエンドでWebsocketクライアントを作成します。
var WS = new WebSocket("wss://websocket.localhost:81/ws/")
この場合、httpsを使用した安全な接続で接続を作成でき、ポートは81で、プロキシパスはWebsocketリクエストをローカルでリッスンされたポート3232にリダイレクトします。これはほとんど回避策のような正確なソリューションではありません。しかし、それは私にとってはうまくいきます。
自己署名証明書の場合、WebSocketでのみ使用されていると、ブラウザーは証明書を受け入れるためのダイアログを表示しません。最初に同じサーバー上の通常のページにアクセスして証明書の警告を表示して受け入れる必要があります。その後、安全なWebSocketを作成できます。
このURLをFirefoxで https://websocket.localhost/mypath/ws 開いて、最初に証明書を受け入れてみてください。
私はしばらくの間、これの上に髪を引っ張っていました。さまざまなWebブラウザーに応じて、あらゆる種類の不可解なエラーメッセージが表示されていたため、証明書の例外に関するもののように聞こえました。 FirefoxとChromeではすでに例外を作成していました。
Javascriptのサブプロトコル文字列にタイプミスがあることが判明しました!
サブプロトコル文字列を修正すると、すべてが改善されました。 WebSocketとサブプロトコルの使用に関する詳細情報: https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
Firefoxの詳細設定に証明書の例外を追加して、この問題を解決しました。
自己署名証明書の場合、WebSocketでのみ使用されていると、ブラウザーは証明書を受け入れるためのダイアログを表示しません。
最初に要求されたURLにアクセスして証明書の警告を確認して受け入れる必要があります。その後、安全なWebSocketを作成できます。
たとえば、WebSocketのURLが次の場合:
wss:// localhost:44300/OpenWebSocket
次にアクセス:
https:// localhost:44300/OpenWebSocket
そして証明書の警告を受け入れる