Uncaught (in promise) DOMException: Failed to construct ‘WebSocket’: An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
明确指出了一个常见的安全限制:当尝试从一个通过HTTPS加载的页面上发起一个不安全的(即非加密的,使用ws://而非wss://)WebSocket连接时,浏览器会阻止这个操作。这是因为HTTPS页面期望所有加载的资源(包括WebSocket连接)都应该是安全的,以防止中间人攻击等安全风险。如果页面通过HTTPS加载,但尝试与HTTP服务建立WebSocket连接,这可能会使HTTPS提供的安全保障失效。
解决方案
-
使用WSS(WebSocket Secure)
将WebSocket连接从ws://更改为wss://。这意味着WebSocket服务器需要支持TLS/SSL加密。 -
火狐浏览器:
配置network.websocket.allowInsecureFromHTTPS。
WSS配置
略。
火狐配置步骤
- 地址栏输入:
about:config
- 查找:
network.websocket.allowInsecureFromHTTPS
- 修改属性为:
true
network.websocket.allowInsecureFromHTTPS
network.websocket.allowInsecureFromHTTPS 这个设置实际上并不是一个广泛认可或标准化的浏览器配置选项。在大多数现代浏览器(如Chrome、Firefox、Safari等)中,并没有直接名为 network.websocket.allowInsecureFromHTTPS 的设置来控制是否允许从HTTPS页面发起不安全的(即非wss://)WebSocket连接。
浏览器通常内置了安全策略,禁止从HTTPS页面加载不安全的资源,包括WebSocket连接,以保护用户免受潜在的安全威胁。这种策略是自动应用的,并且不需要用户或开发者进行额外的配置。然而,在某些特定的环境或应用程序中(如某些基于Chromium的嵌入式浏览器或特定框架中的浏览器组件),开发者或系统管理员可能会遇到需要自定义此类安全策略的情况。在这种情况下,他们可能会寻找或实现类似 network.websocket.allowInsecureFromHTTPS 的功能,但这通常是通过不同的方式实现的,比如:
- 浏览器扩展或插件:某些浏览器扩展或插件可能提供了修改安全策略的能力,但这通常不是针对WebSocket的特定设置。
- 浏览器配置文件:对于某些浏览器,特别是基于Chromium的浏览器,开发者或系统管理员可能可以修改浏览器的启动参数或使用特定的配置文件来覆盖默认的安全策略。但这通常涉及到复杂的配置和潜在的安全风险。
- 服务器端代理:另一种常见的方法是使用服务器端代理来将不安全的WebSocket连接转换为安全的WebSocket连接(即wss://)。这样,即使原始WebSocket服务器不支持TLS/SSL,客户端也可以通过HTTPS页面安全地与之通信。
- 本地开发环境:在本地开发环境中,开发者可能会使用HTTP服务器来测试WebSocket连接。在这种情况下,他们可能会暂时禁用浏览器的安全策略(例如,通过浏览器设置或扩展),但请注意,这种做法绝不应在生产环境中使用。
- 自定义浏览器或WebView:在开发自定义浏览器或基于WebView的应用程序时,开发者可能具有更多的控制权来修改安全策略。然而,这通常需要深入了解浏览器的内部工作原理和安全性。
漏刻有时