小程序是用网址链接后端好,还是ip链接后端好

小程序前端 wx.request/uploadFile /downloadFile/wss 正式上线:只能用域名(网址),绝对不能用公网 IP 直连。 不是技术好不好的取舍,是微信平台强制硬性规则,IP 直连线上会直接被拦截、审核无法通过。 IP 只允许在非常有限的开发调试场景临时用。

一、微信官方网络规则(核心硬约束)


出自小程序官方网络文档:
  1. 正式环境 禁止公网 IP、localhost 作为请求地址,哪怕你给 IP 部署了 HTTPS 证书也不行,底层拦截,无法加到服务器域名白名单。
  2. 合法请求必须满足:已 ICP 备案域名 + HTTPS/WSS + 配置到小程序后台「服务器域名」白名单
  3. 仅有的两个 IP 例外:
    • ✅ 开发者工具模拟器:勾选「不校验合法域名、TLS、证书」,可以临时用公网 IP / 本地 IP 调试,这个开关对真机预览 / 真机调试不生效
    • ✅ 基础库 2.4.0+:同一局域网内网 IP(192.168/10/172 段) 真机允许访问,仅限内网联调
  4. 后端服务器和后端之间、内网服务互相调用,不受这个限制,随便用 IP。
  5. 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、更快、更稳定、内网安全组隔离。这条不受小程序前端规则约束。

四、常见踩坑误区

  1. ❌误区:我给 IP 装了 HTTPS 证书就可以线上用 不行,微信白名单字段设计上就不接受 IP 格式,客户端有 URL 判断拦截,和证书无关。
  2. ❌误区:开发工具能跑 = 真机能跑 「不校验域名」开关只在 PC 模拟器生效,真机预览 / 调试依然执行完整域名校验。
  3. ❌误区:端口 + 域名不行 域名可以带端口配置到白名单;IP 无论带不带端口线上都不行。
  4. 测试环境也建议用独立二级域名 shturl.cc/mBNJK,备案后加到白名单,比 IP + 穿透稳定得多。

五、总结建议

  1. 小程序前端所有 wx.request 对外接口:统一用域名,这是唯一可持续、合规的方案。
  2. 仅本地模拟器临时开发可以用 IP,真机调试优先内网穿透临时域名。
  3. 后端内网服务之间通信、服务器侧代码调用:放心用 IP

延伸阅读: