I am stuck with Firefox. I could not make WebSocket work on it. I use Tornado Websocket and I initialized it by code below:
app = Application([(r'/mypath/ws', WSHandler)])
http_server = HTTPServer(app, ssl_options={
"certfile": "~/certs/websocket.crt",
"keyfile": "~/certs/websocket.key"
})
http_server.listen("443")
And I initialized it on Javascript side like this:
var WS = new WebSocket("wss://websocket.localhost/mypath/ws");
This code works fine on Chrome, meanwhile, I created the cert by myself and run the page under HTTPS. But Firefox keeps saying that:
Firefox can't establish a connection to the server at wss://websocket.localhost/mypath/ws.
I google it and found too many thoughts but none of'em worked for me :(
Any help will be appreciated.
I solved my problem via ProxyPass. I created a non-secure Websocket server with Tornado and run it on a specific port such as 3232:
app = Application([(r'/ws/', WSHandler)])
ws_server = HTTPServer(app)
ws_server.listen("3232")
Then I've written a proxypass in my Apache conf and use mod_proxy_wstunnel:
ProxyPass /ws/ ws://127.0.0.1:3232/ws/
ProxyPassReverse /ws/ ws://127.0.0.1:3232/ws/
And I create Websocket client on frontend like this:
var WS = new WebSocket("wss://websocket.localhost:81/ws/")
In this case I can create a connection on a secure connection with https and my port is 81 and my proxypass redirect any Websocket request to locally listened port 3232. It is not a exact solution mostly like a workaround. But it works fine for me.