收藏
回答

开发者工具"不校验合法域名"设置对 Android WebSocket 连接不生效?

Android 不行,iOS 可以。请 Android 同学修复一下。


问题概述

标题:开发者工具"不校验合法域名"设置对 Android WebSocket 连接不生效

严重程度:高(阻碍本地开发)

问题类型:功能缺陷




详细描述

在微信开发者工具中,即使勾选了"本地设置 → 不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"选项,WebSocket 连接仍然被域名校验机制拦截,导致连接失败。



复现步骤

  1. 环境配置
  • 打开微信开发者工具
  • 进入"详情" → "本地设置"
  • ✅ 勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"
  1. 发起 WebSocket 连接

  2.    const socket = io('ws://192.168.31.145:8000', {
  3.      path: '/socket.io/',
  4.      transports: ['websocket']
  5.    });





  6. 观察结果
  • 连接短暂成功(收到 connect 事件)
  • 立即断开(收到 disconnect 事件)
  • 错误信息:{errMsg: "fail:url not in domain list"}


预期行为

勾选"不校验合法域名"后:

  • ✅ 允许连接到局域网 IP 地址(如 192.168.x.x
  • ✅ 允许使用 ws://(非加密)协议
  • ✅ 连接应保持稳定,不因域名校验而断开


实际行为

勾选"不校验合法域名"后:

  • ❌ WebSocket 连接仍被域名白名单机制拦截
  • ❌ 连接在握手成功后立即断开
  • ❌ 控制台报错:"fail:url not in domain list"
  • ❌ 与"不校验合法域名"的预期行为不符


前端日志(关键证据)


[00:09:36 GMT+0800 (CST)] === 测试1: 使用新 SocketTask API ===

index.ts:219 [00:09:36 GMT+0800 (CST)] 开始连接...

index.ts:219 [00:09:36 GMT+0800 (CST)] ✅ wx.connectSocket 调用成功

index.ts:219 [00:09:36 GMT+0800 (CST)] ✅ SocketTask.onOpen 触发

index.ts:219 [00:09:36 GMT+0800 (CST)]   - header: {"Connection":"Upgrade","Sec-WebSocket-Accept":"DKfV+Nr1FXd88mM8q7nKRzQYQZ4=","Upgrade":"websocket","date":"Wed, 07 Jan 2026 16:09:36 GMT","server":"uvicorn"}

index.ts:219 [00:09:36 GMT+0800 (CST)] 📤 发送消息: Hello from SocketTask!

index.ts:219 [00:09:36 GMT+0800 (CST)] ✅ 消息发送成功

index.ts:219 [00:09:36 GMT+0800 (CST)] 📨 SocketTask.onMessage 收到消息:

index.ts:219 [00:09:36 GMT+0800 (CST)]   - data: 0{"sid":"A9lneJVLGxc_IPEwAAAO","upgrades":[],"pingTimeout":60000,"pingInterval":25000,"maxPayload":1000000}

index.ts:219 [00:09:36 GMT+0800 (CST)] ❌ SocketTask.onError: {"errMsg":"fail:url not in domain list"}

index.ts:219 [00:09:37 GMT+0800 (CST)] 🔌 SocketTask.onClose 触发

index.ts:219 [00:09:37 GMT+0800 (CST)]   - code: 1006

index.ts:219 [00:09:37 GMT+0800 (CST)]   - reason: 

index.ts:219 [00:09:45 GMT+0800 (CST)] === 测试2: 使用老 wx.onSocket* API ===

index.ts:219 [00:09:45 GMT+0800 (CST)] ⚠️ 不推荐使用,仅用于对比测试

WAServiceMainContext.js:1 MiniProgramError

wx.offSocketOpen is not a function

TypeError: wx.offSocketOpen is not a function

    at ComponentCaller.testOldAPI (https://usr/chunk_11.appservice.js:2:1473)

    at ComponentCaller.<anonymous> (https://lib/WAServiceMainContext.js:1:610114)

    at c.testOldAPI (https://lib/WAServiceMainContext.js:1:738985)

    at f (https://lib/WAServiceMainContext.js:1:496230)

    at p.call (https://lib/WAServiceMainContext.js:1:496124)

    at e.callListener (https://lib/WAServiceMainContext.js:1:546732)

    at https://lib/WAServiceMainContext.js:1:547924

    at a (https://lib/WAServiceMainContext.js:1:547138)

    at o (https://lib/WAServiceMainContext.js:1:547419)

    at e.dispatch (https://lib/WAServiceMainContext.js:1:547772)

errorReport @ WAServiceMainContext.js:1

thirdErrorReport @ WAServiceMainContext.js:1

(anonymous) @ WAServiceMainContext.js:1

(anonymous) @ WAServiceMainContext.js:1

f @ WAServiceMainContext.js:1

call @ WAServiceMainContext.js:1

O @ WAServiceMainContext.js:1

f @ WAServiceMainContext.js:1

call @ WAServiceMainContext.js:1

callListener @ WAServiceMainContext.js:1

(anonymous) @ WAServiceMainContext.js:1

a @ WAServiceMainContext.js:1

o @ WAServiceMainContext.js:1

dispatch @ WAServiceMainContext.js:1

f @ WARenderContext.js:1

dispatchEvent @ WARenderContext.js:1

triggerTouchEvent @ WARenderContext.js:1

(anonymous) @ WARenderContext.js:1

Ut @ WAServiceMainContext.js:1

handleTap @ WARenderContext.js:1

handleTrackEnd @ WARenderContext.js:1

dispatchTouchEvent @ WARenderContext.js:1

(anonymous) @ WARenderContext.js:1

(anonymous) @ WARenderContext.js:1

index.ts:219 [00:09:51 GMT+0800 (CST)] === 测试3: 最简连接(无操作)===

index.ts:219 [00:09:51 GMT+0800 (CST)] ✅ 连接调用成功

index.ts:219 [00:09:51 GMT+0800 (CST)] ❌ 连接错误: {"errMsg":"fail:url not in domain list"}

index.ts:219 [00:11:16 GMT+0800 (CST)] 🔌 连接已关闭: code=1000, reason=



后端日志(证明连接确实成功)



# Engine.IO 握手成功

68r8MqovBwyVwgasAAAA: Sending packet OPEN data {'sid': '68r8MqovBwyVwgasAAAA', ...}

68r8MqovBwyVwgasAAAA: Upgrade to websocket successful

INFO: connection open


# Socket.IO 连接建立

🔌🔌🔌 [CONNECT EVENT] Socket.IO 连接建立: w-TaGkuOTSARZ4TmAAAB

[CONNECT EVENT] auth: None






结论:后端日志证明连接完全成功,问题出在前端小程序的域名校验机制。



环境信息


影响范围

受影响的开发场景

  1. 本地 WebSocket 调试:无法连接本地开发服务器
  2. 局域网联调:无法通过局域网 IP 进行真机测试
  3. Socket.IO 开发:所有使用 Socket.IO 的实时通信功能

影响的开发者

  • 使用 WebSocket 进行实时通信的小程序开发者
  • 需要在本地调试 Socket.IO 的开发团队
  • 需要局域网联调的多端开发团队


已尝试的解决方案

方案结果说明勾选"不校验合法域名"❌ 无效问题依然存在





技术分析

问题根源

"不校验合法域名"选项的实现可能存在以下问题:

  1. HTTP/HTTPS 请求生效,WebSocket 不生效
  • wx.request 正常使用局域网 IP ✅
  • wx.connectSocket 仍被域名校验拦截 ❌




期望修复

短期修复

  1. 确保"不校验合法域名"对 WebSocket 连接生效
  2. 保持配置的一致性(HTTP 和 WebSocket 应使用相同的校验规则)


回答关注问题邀请回答
收藏
登录 后发表内容