uniapp中uni.connectsocket报错open fail: _code:20,_msg:invalid http status如何解决

我在uniapp中使用uni.connectSocket时遇到了报错:open fail: _code:20,_msg:invalid http status。请问这是什么原因导致的?应该如何解决这个问题?

2 回复

检查请求地址是否以ws://wss://开头,确保是WebSocket协议。确认服务器是否支持WebSocket,并检查网络连接是否正常。


在UniApp中使用uni.connectSocket出现open fail: _code:20, _msg:invalid http status错误,通常是由于WebSocket连接请求被服务器拒绝或返回非法的HTTP状态码(如非101状态码)。以下是常见原因和解决方案:

  1. 检查WebSocket URL格式:确保URL以ws://wss://开头,且端口正确。例如:

    uni.connectSocket({
      url: 'wss://example.com/socket', // 使用wss(加密)或ws(非加密)
      success: (res) => {
        console.log('连接成功', res);
      },
      fail: (err) => {
        console.error('连接失败', err);
      }
    });
    
  2. 服务器端配置问题:服务器可能未正确处理WebSocket握手请求。确认服务器支持WebSocket协议,并返回正确的HTTP状态码(101 Switching Protocols)。检查服务器日志以获取详细错误信息。

  3. 网络或代理问题:如果使用代理或防火墙,确保允许WebSocket连接。在开发环境中,尝试关闭代理或检查网络设置。

  4. 跨域问题(仅浏览器端):在H5环境中,如果服务器未配置CORS(跨域资源共享),可能导致连接失败。确保服务器设置Access-Control-Allow-Origin头允许你的域名。

  5. UniApp配置检查:在manifest.json中,确认已正确配置网络请求权限(仅App端需要):

    {
      "app-plus": {
        "modules": {
          "WebSocket": {}
        }
      }
    }
    
  6. 测试服务器可用性:使用工具(如Postman或浏览器开发者工具)测试WebSocket服务器是否正常运行。

如果问题持续,提供服务器端错误日志或尝试连接其他WebSocket服务进行排查。通常,此错误与服务器响应相关,而非客户端代码问题。

回到顶部