
文章分类:新闻资讯 发布时间:2026-09-20 原文作者:小程序开发 阅读( )

做小程序开发的兄弟,估计都有过这种体验:后端接口还在内网环境,你这边前端页面已经写好了,想联调,结果手机一扫码,白屏。报错信息清一色是“request:fail”。你心里清楚,不是代码问题,是网络不通。微信小程序这玩意儿,不像普通网页,改个host就能访问内网,它的请求域名必须走HTTPS,还得在小程序后台配白名单。内网环境,哪儿来的HTTPS证书?就算有,你总不能把内网IP也配到正式环境的白名单里吧?所以,内网联调成了每个小程序开发者的日常噩梦。
第一个方案,也是最土但最有效的——改本地代码,把request的域名从https改成http,然后关闭小程序后台的“合法域名校验”。具体操作是:在微信开发者工具的“详情”设置里,勾选“不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书”。这样一来,你的小程序就能直接请求http://192.168.x.x:8080这种内网地址了。这个方案的好处是零成本,不需要搭任何服务,改个配置就能跑。坏处也很明显——你改了代码里的baseURL,万一忘了改回来,直接提交代码,线上就炸了。我见过不止一个同事,联调完忘改,结果生产环境的小程序请求全指向了内网IP,用户那边全挂。所以,用这个方案,务必在代码里加个环境判断,开发环境才用http,生产环境强制用https,最好用条件编译或者环境变量来控制。
第二个方案,用Charles或者Fiddler这类抓包工具做代理转发。思路是:小程序请求的域名还是正式的https地址,但你在电脑上装好Charles,开启SSL Proxying,然后手机连上电脑的WiFi代理,再把小程序的request域名指向电脑的本地端口。Charles会拦截到请求,然后转发到你内网的真实服务地址上。这个方案的好处是,小程序代码完全不用改,线上是什么域名,开发时还是什么域名,只是网络层被代理拦截了。坏处是配置起来麻烦,你得先给手机装Charles的证书,还得在Charles里配置Map Remote规则。而且,如果你用的不是macOS,Windows下的Charles配置更折腾。另外,微信开发者工具本身也支持设置网络代理,你可以在工具里直接配代理,不用非得在手机上配。这个方案适合后端接口已经比较稳定、你只是偶尔需要联调的场景。
第三个方案,是真正解决“多人协作”痛点的——搭建一个内网穿透服务,比如ngrok、frp或者基于它们的云服务。原理很简单:你在内网服务器上跑一个frp客户端,把内网服务的端口映射到一台有公网IP的服务器上,然后小程序请求那个公网域名,公网服务器再把流量转发回内网。这样一来,你的小程序代码里就可以写一个正式的https域名(穿透服务提供方会给你一个),这个域名在内网开发时指向穿透服务,穿透服务再帮你转回内网。这个方案的好处是,团队里所有人都可以用同一个域名联调,不用各自改host、改代理,而且可以配合小程序后台的“request合法域名”配置,直接把穿透域名加进去,开发环境、测试环境都用它。坏处是,如果你们公司没有公网服务器,得花钱买一台,或者用商用的穿透服务,比如natapp、花生壳,但免费版的速度和稳定性都一般。
我个人比较推荐的是第二种和第三种结合着用。如果你是独立开发,后端只有你自己在调,用Charles就够了,改改代理,不用动代码。但如果你在一个团队里,前端两三个人,后端还有一两个,那最好还是搭一个frp穿透服务。因为Charles的代理是绑定在你个人电脑上的,别人没法共享你的代理。而穿透服务是部署在服务器上的,所有人都指向同一个域名,后端同事更新了接口,你刷新一下就能看到新数据,不用再互相喊“你重启一下服务”“你代理开一下”。
还有一个容易被忽略的细节——小程序的request域名要求必须是备案过的,而且不能带端口号。这意味着,你如果用穿透服务,穿透域名本身必须备案,而且不能是ip:port这种形式。很多免费穿透服务给的域名是随机生成的,可能没备案,用几天就被封了。所以,如果你决定用穿透方案,最好用自己公司的域名,解析到穿透服务商的服务器上,这样才能保证域名稳定、可备案。
另外,联调时最常见的坑是“跨域”。小程序虽然本质上是客户端请求,但它的request逻辑是基于XMLHttpRequest的,所以也会受浏览器同源策略影响。内网开发时,如果后端接口没有设置CORS头,前端请求就会报跨域错误。很多人以为是网络问题,排查半天才发现是后端忘了加Access-Control-Allow-Origin。所以,无论你用哪个方案,先确认后端接口的CORS配置是通的,再去折腾网络层。
说到底,内网联调这事儿,没有一劳永逸的银弹。每个方案都有它的适用场景和坑。你要是图省事,就开“不校验域名”直接请求http;你要是。但不管选哪个,记得在代码里留好环境切换的开关,别让联调配置污染了生产代码。
说一句,微信开发者工具最近几年更新了不少,现在它自带的“真机调试”功能其实已经能在一定程度上绕过内网限制——只要你的手机和电脑在同一个局域网,工具会通过局域网通道转发请求。但前提是,你的后端接口得监听在能访问到的IP上,而且手机的代理设置不能冲突。这个功能我试过几次,稳定性一般,偶尔会断连,但聊胜于无。内网开发的痛,每个小程序开发都懂,。