Socket合法域名格式规范的核心是:域名必须使用wss://或https://协议前缀,不能带路径参数,且端口号需与域名主体一起校验,否则小程序或App会拒绝连接。
很多开发者第一次配置socket域名时,以为随便填个IP或普通网址就行,结果真机调试时直接报url not in domain list,这篇文章把格式规范、写法示例和常见的坑一次说透。
socket合法域名格式规范是什么
业内专家指出,socket合法域名是指通过平台审核、允许WebSocket连接的域名白名单,它和普通HTTPS域名最大的区别在于协议层必须支持WSS(WebSocket Secure),以及校验规则更严格。
核心格式要求
- 协议头:必须是
wss://或https://,http://和ws://在小程序正式环境中一律不合法 - 域名主体:只能是标准域名,不能是IP地址(本地调试除外)
- 端口号:可省略,如果写端口则必须跟在域名后面用冒号连接
- 路径:完全不允许出现,例如
wss://example.com/socket是非法写法 - 查询参数:同样禁止,
?token=xxx这种写法直接报错
一个标准的合法域名写法
wss://api.yourdomain.com
wss://api.yourdomain.com:8080
https://socket.yourdomain.com
错误的写法示例
ws://api.yourdomain.com // 未加密协议
http://api.yourdomain.com // 普通HTTP
https://api.yourdomain.com/socket // 带了路径
https://192.168.1.1:8080 // 使用IP地址
这里有个容易混淆的点:https://域名也属于socket合法域名的允许范围,因为WebSocket的握手请求可以基于HTTPS协议发起,但如果你在代码里用的是wx.connectSocket,那么填https://不会被识别为socket地址,必须用wss://,所以规范写法是只填域名主体,把协议和路径的控制权交给平台和业务代码。
微信小程序socket域名怎么配置
微信小程序的socket域名配置入口在微信公众平台后台,路径是:开发管理 -> 开发设置 -> 服务器域名 -> socket合法域名。
配置操作步骤
- 登录微信公众平台,进入「开发」->「开发管理」
- 找到「服务器域名」区域,点击「修改」
- 在「socket合法域名」输入框中填写你的域名,例如
wss://push.weapp.com - 点击保存,等待几分钟生效
配置时的三个关键限制
- 域名必须已完成ICP备案,且指向的服务器IP与备案信息一致
- 支持配置最多20个socket合法域名,但每个域名只能填写一次
- 不支持IP、不支持localhost、不支持带端口以外的任何后缀
有些开发者会问:端口号什么时候需要写?如果你的服务用默认的443端口,可以省略,但如果你用8080、8443或其他自定义端口,必须完整写出端口号,平台校验端口时是精确匹配的,比如填了wss://api.example.com:8080,代码里连wss://api.example.com:8443都连不上。
本地调试不走校验的场景
开发阶段在开发者工具中勾选「不校验合法域名」,可以绕过域名校验,但真机预览和上线后,这个开关完全失效,必须用合法域名,行业共识认为,正规项目应该在一开始就使用正式域名,并把开发环境的socket服务代理到该域名下的子路径,避免上线前手忙脚乱。
socket合法域名和普通域名有什么区别
很多新手混淆了普通request域名和socket域名的规则,这里用一张表说清楚:
| 对比项 | socket合法域名 | request合法域名 |
|---|---|---|
| 协议要求 | 必须wss或https | 必须https |
| 是否允许路径 | 不允许 | 不允许 |
| 是否允许IP | 不允许 | 不允许 |
| 端口规则 | 必须精确匹配 | 必须精确匹配 |
| 典型用途 | WebSocket长连接 | HTTP接口请求 |
| 配置位置 | 同一后台不同输入框 | 同一后台不同输入框 |
本质上两者的格式规范很相似,但socket域名对长连接的稳定性要求更高,因为WebSocket连接一旦建立就会一直保持,平台在审核时会对域名的TLS证书强度、服务器稳定性做更严格的检查,如果证书过期或服务器频繁断连,你的socket域名可能会被临时封禁。
免费socket域名可以用吗
这里说的免费域名,通常指tk、ml这类免费顶级域名,或者某些云平台的临时域名,答案分两种情况:
开发测试阶段
可以临时使用,但需要注意:
- 免费域名的ICP备案状态多为无,在微信开发者工具中勾选「不校验合法域名」后能跑通
- 如果使用
ngrok等内网穿透工具生成的临时域名,格式上是https://xxx.ngrok.io,同样只能在本地调试
正式上线阶段
强烈不建议用免费域名,原因有三点:
- 免费域名无法正常备案,就算平台审核通过,随时可能被收回
- 证书申请和续期麻烦,很多免费域名不支持自动化签发
WSS证书 - 稳定性差,服务器IP变更后域名解析不及时,业务直接断连
更好的方案是使用二级域名,比如你的主域名是example.com,可以专门创建一个socket.example.com指向WebSocket服务,这样既满足格式要求,又不影响现有HTTP接口的域名布局。
关于socket合法域名格式的常见问题
Q:socket域名配置成功但连接时提示failed to connect,怎么排查?
先检查端口是否被防火墙拦截,再确认TLS证书链是否完整,用openssl s_client -connect 域名:端口可以快速验证证书状态,另外别忘了在微信公众平台后台的「开发设置」里,确认域名已经处于「已生效」状态,有时修改后需要等几分钟。
Q:一个socket合法域名可以配置多个端口和路径吗?
端口只能写一个,路径完全不允许填写,如果业务需要多个socket服务,正确做法是申请多个子域名,例如push1.example.com和push2.example.com,分别配置,如果你的服务需要按用户区分连接,建议在连接时用请求头或子协议字段传递业务标识,而不是依赖URL路径。
Q:IP地址真的不能配置为socket合法域名吗?
常规情况下不能,但微信公众平台对局域网IP有特殊支持,在「开发设置」中,有一个「局域网」选项,可以勾选允许168.开头的IP地址,这仅限于同一个局域网内的调试场景,公网环境一律不适用,上线项目必须用域名。
socket合法域名的格式规范并不复杂,核心就是记住协议限定WSS/HTTPS、禁止路径和参数、域名需备案,如果你卡在配置上,先检查这三项,再考虑证书和端口问题。