Fat*_*ana 10 javascript python firefox tornado websocket
我被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")
Run Code Online (Sandbox Code Playgroud)
我在Javascript端初始化它像这样:
var WS = new WebSocket("wss://websocket.localhost/mypath/ws");
Run Code Online (Sandbox Code Playgroud)
此代码在Chrome上运行正常,同时我自己创建了证书并在HTTPS下运行该页面.但Firefox一直这样说:
Firefox can't establish a connection to the server at wss://websocket.localhost/mypath/ws.
Run Code Online (Sandbox Code Playgroud)
我谷歌它,发现太多的想法,但没有'''为我工作:(
任何帮助将不胜感激.
小智 25
如果它是自签名证书,并且仅在 Websocket 中使用,浏览器将不会显示接受该证书的对话框。
您必须首先访问请求的 url 以查看并接受证书警告,然后才能创建安全 Websocket。
例如,如果您的 websocket url 是:
wss://localhost:44300/OpenWebSocket
,则访问:
https://localhost:44300/OpenWebSocket
并接受证书警告
如果它是自签名证书,则浏览器不会显示接受证书的对话框(如果它仅用于websocket).您必须首先访问同一服务器上的普通页面以查看并接受证书警告,然后您可以创建安全websocket.
我通过 ProxyPass 解决了我的问题。我使用 Tornado 创建了一个非安全的 Websocket 服务器,并在特定端口(例如 3232)上运行它:
app = Application([(r'/ws/', WSHandler)])
ws_server = HTTPServer(app)
ws_server.listen("3232")
Run Code Online (Sandbox Code Playgroud)
然后我在 Apache conf 中编写了一个 proxypass 并使用 mod_proxy_wstunnel:
ProxyPass /ws/ ws://127.0.0.1:3232/ws/
ProxyPassReverse /ws/ ws://127.0.0.1:3232/ws/
Run Code Online (Sandbox Code Playgroud)
我在前端创建 Websocket 客户端,如下所示:
var WS = new WebSocket("wss://websocket.localhost:81/ws/")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以使用 https 创建一个安全连接,我的端口是 81,我的 proxypass 将任何 Websocket 请求重定向到本地侦听的端口 3232。这不是一个确切的解决方案,主要是一种解决方法。但它对我来说效果很好。