一、微信官方网络规则(核心硬约束)
出自小程序官方网络文档:
- 正式环境 禁止公网 IP、localhost 作为请求地址,哪怕你给 IP 部署了 HTTPS 证书也不行,底层拦截,无法加到服务器域名白名单。
- 合法请求必须满足:已 ICP 备案域名 + HTTPS/WSS + 配置到小程序后台「服务器域名」白名单。
- 仅有的两个 IP 例外:
- ✅ 开发者工具模拟器:勾选「不校验合法域名、TLS、证书」,可以临时用公网 IP / 本地 IP 调试,这个开关对真机预览 / 真机调试不生效
- ✅ 基础库 2.4.0+:同一局域网内网 IP(192.168/10/172 段) 真机允许访问,仅限内网联调
- 后端服务器和后端之间、内网服务互相调用,不受这个限制,随便用 IP。
- web-view 业务域名同样只能域名、不能 IP。
补充:支付宝小程序、抖音小程序规则基本和微信一致,线上也禁止公网 IP 直连前端请求。
二、域名 vs IP 完整对比
表格
| 维度 | 用域名(推荐线上) | IP 直连(仅临时调试) |
|---|---|---|
| 微信线上合规性 | ✅ 完全合规、可配置白名单、过审 | ❌ 线上拦截、无法加入白名单、审核失败 |
| HTTPS 证书 | ✅ 免费 DV 证书大量支持,证书校验正常 | ⚠️ IP 型 HTTPS 证书极少、贵、免费证书几乎不发,微信不认 |
| 服务器更换 / 迁移 IP | ✅ DNS 改解析,客户端无感知、不用改代码发版 | ❌ IP 一变小程序代码全部要改、重新提交审核,灾难性麻烦 |
| 负载均衡 / CDN / 高可用 | ✅ DNS 多 IP、云 LB、CDN、灰度切换非常方便 | ❌ 无法做域名层流量调度、故障切换难 |
| 运维网关、统一限流、WAF、OSS/COS 资源 | ✅ 天然适配 | ❌ 很难做统一入口 |
| 开发成本 | 需要买域名、备案、配 SSL(一次性) | 不用域名备案,本地快速起服务 |
| 适用范围 | 生产、测试环境、真机预览 | 仅开发者工具模拟器、局域网本地联调 |
三、分场景最佳做法
1. 线上发布、正式生产环境 → 必须域名
- 规范:
shturl.cc/nWMLL1qgo子域名专门做接口,备案 + SSL,加到 request 合法域名 - 后端实际服务依然可以在内网用 IP + 端口部署,前面 Nginx / 网关反向代理域名到内网 IP,这是标准架构。
- 好处:以后换服务器、换 IP、扩容、上 CDN、切换云厂商都不用改小程序代码。
2. 本地开发、前后端联调
- 模拟器:可以直接
http://127.0.0.1:3000/ 局域网 IP,工具里关掉域名校验。 - 需要真机调试本地后端:不要硬写公网 IP,正确做法是用 cpolar/ngrok 等内网穿透拿到一个临时 HTTPS 域名,加到开发环境白名单。
- 真机同 WiFi 局域网:可以用电脑局域网 IP(192.168.x.x)访问本地后端。
3. 后端内部、服务之间、数据库、缓存、服务器端 curl 调用
- 完全优先用 IP / 内网 IP,不走 DNS、更快、更稳定、内网安全组隔离。这条不受小程序前端规则约束。
四、常见踩坑误区
- ❌误区:我给 IP 装了 HTTPS 证书就可以线上用 不行,微信白名单字段设计上就不接受 IP 格式,客户端有 URL 判断拦截,和证书无关。
- ❌误区:开发工具能跑 = 真机能跑 「不校验域名」开关只在 PC 模拟器生效,真机预览 / 调试依然执行完整域名校验。
- ❌误区:端口 + 域名不行 域名可以带端口配置到白名单;IP 无论带不带端口线上都不行。
- 测试环境也建议用独立二级域名 shturl.cc/mBNJK,备案后加到白名单,比 IP + 穿透稳定得多。
五、总结建议
- 小程序前端所有 wx.request 对外接口:统一用域名,这是唯一可持续、合规的方案。
- 仅本地模拟器临时开发可以用 IP,真机调试优先内网穿透临时域名。
- 后端内网服务之间通信、服务器侧代码调用:放心用 IP。
