崔家丶聪少
崔家丶聪少
  • 发布:2026-07-17 14:06
  • 更新:2026-07-17 14:12
  • 阅读:113

小程序真机调试WebSocket报错open fail: _code:20,_msg:Invalid H?

分类:uni-app

WebSocket 出错: {errCode: 1004, errMsg: "open fail: _code:20,_msg:Invalid HTTP status."}

只要是真机运行小程序就会报这个错误,同一套代码编译成h5不管在pc还是手机上都没问题

2026-07-17 14:06 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

这个问题通常与 uni.connectSocketheader 参数配置有关。在微信小程序真机环境中,如果在 header 中设置了 Origin 字段,会导致真机连接失败并报 errCode: 1004,而模拟器和 H5 端表现正常。

根据已有反馈,这是一个已知的兼容性问题:DCloud问答_185315

建议排查以下两点:

  1. 检查 header 中是否设置了 Origin 字段:如果代码中存在类似下面的写法,请移除 Origin 配置,真机环境下该字段会导致连接失败。
uni.connectSocket({  
  url: 'wss://xxx.cn/api/chat',  
  header: {  
    'Origin': 'wss://xxx.cn', // 移除此行  
    'Authorization': 'Bearer xxx'  
  }  
});

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  1. 确认 url 协议与 header 合规性:根据官方文档,小程序中 url 必须使用 wss:// 协议,且 header 中不能设置 Referer。请确认你的连接地址和请求头是否符合规范。

参考文档:uni.connectSocket 兼容性说明

内容为 AI 生成,仅供参考
崔家丶聪少

崔家丶聪少 (作者) - 1

const ws_url = this.config.ws_url + '/WebSocketFamen/'
this.ws = new WebSocketManager({
url: ${ws_url}{'device_id':'${this.famenId}'},
header: {
'content-type': 'application/json'
},
heartbeatInterval: 30000,
reconnectMaxAttempts: 5,
onMessage: (data) => {
// console.log('收到服务器推送:', data);
data = JSON.parse(data);
if (data) {
data[0].paylod = JSON.parse(data[0].paylod);
const totlal = data[0].paylod.FAMEN.TOTAL;

                        data[0].paylod.FAMEN.FmSTA = data[0].paylod.FAMEN.FmSTA.slice(0, totlal)  
                        data[0].paylod.FAMEN.FmSTAA = []  
                        data[0].paylod.FAMEN.FmSTA.forEach((item, index) => {  
                            if (item == 0) {  

                                data[0].paylod.FAMEN.FmSTAA.push({  
                                    STAFLAG: false,  
                                    status: false,  
                                    FmID: index + 1,  
                                })  
                            } else {  
                                data[0].paylod.FAMEN.FmSTAA.push({  
                                    STAFLAG: true,  
                                    status: true,  
                                    FmID: index + 1,  
                                })  
                            }  
                        })  
                        this.valveInfo = data[0].paylod  
                        this.valveList = data[0].paylod.FAMEN.FmSTAA  
                        console.log(this.valveInfo);  
                    }  
                },  
                onOpen: () => {  
                    console.log('连接成功,可以发送消息了');  
                },  
                onClose: (code, reason) => {  
                    console.log(`连接关闭: ${code} - ${reason}`);  
                },  
                onError: (err) => {  
                    console.error('WebSocket 出错:', err);  
                    uni.showToast({  
                        title: '连接异常',  
                        icon: 'none'  
                    });  
                }  
            })  

            // 发起连接  
            this.ws.connect();没有配置'Origin': 'wss://xxx.cn'

要回复问题请先登录注册