是否可以使用HTTPS的WebSockets?
当切换到HTTPS时,我的WebSocket会返回一个安全错误,并与常规HTTP完美配合。
下面是一个片段;
socket = new WebSocket("ws://my_www:1235");
WebSocket连接以HTTP或HTTPS握手开始其生命周期。当通过HTTP访问页面时,可以使用WS或WSS(WebSocket-secure:WS-overTLS)。然而,当您的页面通过HTTPS加载时,您只能使用WSS——浏览器不允许"降级"安全性。
您不能通过HTTPS使用WebSockets,但可以通过TLS使用WebSocket(HTTPS是通过TLS的HTTP)。只需在URI中使用"wss://"。
我相信最近版本的Firefox不会让你从HTTPS页面使用非TLS WebSockets,但反过来应该不会有问题。
除了kanaka/peter的回答之外,还有一个额外的警告:如果您使用WSS,并且服务器证书对浏览器来说是不可接受的,那么您可能不会得到任何浏览器呈现的对话框(就像在网页中发生的那样)。这是因为WebSockets被视为所谓的"子资源",证书接受/安全异常/任何对话框都不会为子资源呈现。
为了支持@oberstet的答案,如果浏览器不信任证书(例如,您得到一个"此网站不安全,您想继续吗?"),一个解决方案是打开浏览器选项,导航到证书设置,添加主机并将websocket服务器作为例外发送给证书提供商。
例如,添加"example-wss-domain.org/6001"作为"Certificate Provider Ltd"的例外。
在firefox中,这可以通过"about:preferences"和搜索"Certificates"来完成