微信小程序服务器配置用http,正式环境走不通,官方强制要求https;但开发调试阶段可以通过勾选“不校验合法域名”实现http访问,这是唯一的http配置入口。
微信小程序服务器域名怎么配置才算合规
很多开发者第一次接触小程序后台时,都会在“服务器域名”那一栏卡住,因为填http地址直接被拒绝,这不是Bug,是平台的安全策略。
微信小程序http和https区别:为什么必须换
小程序和普通网站不一样,普通浏览器访问http接口,最多地址栏提示“不安全”,数据照样能收发,小程序对http请求的态度是直接拦截,请求根本到不了服务器。
行业共识认为,这是为了防中间人攻击,http的明文传输意味着用户数据在WiFi、运营商链路里是裸奔状态,小程序里跑着支付、登录、用户信息,明文传输风险太大,所以微信从基础库2.x版本开始,就彻底堵死了线上环境的http通道。
在后台配置合法域名的操作路径
打开微信公众平台,进入小程序后台,依次点击开发管理→开发设置→服务器域名,能看到四类域名:
- request合法域名:普通接口请求
- socket合法域名:WebSocket长连接
- uploadFile合法域名:文件上传
- downloadFile合法域名:文件下载
每个输入框只认https开头的地址,例如https://api.example.com,填写后保存,几分钟内生效,这里有几个硬性条件:
- 域名必须完成ICP备案,据工信部备案要求,未备案域名一律无法配置
- 不能使用IP地址,不能使用localhost
- 端口要跟在域名冒号后面,比如
https://api.example.com:8443 - 修改次数有限制,一个域名一天最多修改5次,保存前仔细核对
开发环境下http配置的绕过方法
小程序的开发调试阶段,你可以合法地用http,前提是关掉微信的域名校验开关。
开发者工具勾选“不校验域名”的具体步骤
打开微信开发者工具,导入项目后,点击右上角的详情按钮,切到本地设置,找到不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书,把它勾上,这一步做完,你的小程序代码里写http://开头的接口地址就能正常请求了。
本地接口调试的http配置技巧
配合本地后端调试时,建议直接用http://localhost:8080这种地址,省去跨域和域名解析的麻烦,如果你的后端跑在另一台电脑上,就用局域网IP,比如http://192.168.1.105:8080,手机预览时保持手机和电脑连同一个WiFi,同样用电脑的局域网IP,真机就能调到本地接口,小程序服务器配置http开发版场景下,这是最顺滑的一套方案。
调试完成后的一个关键动作
勾选了“不校验合法域名”之后,开发工具不会对请求做任何域名层面的拦截,但这只是开发环境的福利。每一次预览、上传代码前,记得确认这个开关的勾选状态,不然线上测试时会遇到请求全部失败的情况,查半天才发现是开关的问题。
正式版必须https:服务器配置完整流程
你的小程序要发布上线,就必须把服务器配置成https,流程分三步走。
第一步:给域名签发SSL证书
主流做法是用Let’s Encrypt免费证书,或者云厂商提供的免费证书,以Nginx为例,安装certbot后执行一条签名命令,证书文件会自动生成到指定目录,有效期90天,配合定时任务自动续签。
第二步:修改Nginx配置
在nginx的server块里监听443端口,配置证书路径:
ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;
再把80端口的请求301重定向到443,这样用户访问http时也会自动跳到https,重载nginx配置,用浏览器访问一下你的域名,地址栏出现小锁就说明配置成功了。
第三步:把https域名填进小程序后台
回到小程序后台的服务器域名列表,把https://你的域名填进request合法域名,如果接口里有图片上传,同时把uploadFile合法域名也配上,保存后重新编译小程序,请求就能正常发出去了。
微信小程序正式版http配置被拦截的常见原因
不少开发者在本地用http跑得好好的,一上传体验版就全挂了,这些排查点按顺序过一遍,基本能定位问题。
- 后台域名没配,或者配的是http开头,必须改成https
- SSL证书过期或证书链不完整,微信对这点的校验比浏览器严格得多
- 域名没有备案,配置时后台直接提示无法添加
- 代码里接口地址写死了http,全局搜一下,把baseURL统一改成https
- 自签名证书在开发者工具里能请求,但真机上必被拦截,只能换正规证书
- 服务器防火墙没放行443端口,https请求根本进不来
后端不需要专门处理跨域
很多后端同学习惯性地给接口加跨域头,在小程序场景下完全没必要,小程序请求不受浏览器同源策略约束,后端只需要正常处理http请求即可,少做一步反而少踩一个坑。
云开发环境不需要配置域名
如果你的小程序用了微信云开发,那么服务器域名配置这一栏可以直接跳过,云开发自带https,接口调用走wx.cloud系列API,不需要你自己管域名、证书、备案这些事,这对个人开发者和小团队来说省了不少运维成本。
配置http和https时的几个常见认知误区
实践中小程序服务器配置用http这个需求背后,往往藏着几个误解,提前说清楚能帮你省下大把排查时间。
能用浏览器打开http接口,小程序就能用
浏览器访问http地址只会有安全提示,但流量照走,小程序的拦截是网络层面的,请求直接断掉,浏览器验证不了任何东西。
改完后台域名配置,立刻就能生效
生效有延迟,通常在几分钟到十几分钟,配置完最好等两分钟再重新编译,别反复保存,一天只有5次修改限额。
正式环境也可以“临时绕过”
开发者工具的“不校验合法域名”只作用于开发者工具,真机跑正式版时开关完全不生效,就算你把这版代码上传成体验版,微信后台也会按严格的域名校验规则执行。
Q&A:微信小程序服务器配置用http高频疑问
Q1:小程序开发完上线后,能用http接口吗?
不能,正式版请求http接口会被直接拦截,页面数据加载不出来,第三方服务商的数据统计显示,相当一部分被驳回的小程序审核都涉及http接口问题,上线前把接口统一切到https,做好SSL证书续期,避免证书过期导致服务中断。
Q2:开发时用http调试,上线换https,会有什么坑?
常见坑有三个,第一,环境切换时http和https的baseURL容易写错,建议通过配置项控制,第二,部分后端代码写死了http重定向到https的逻辑,开发环境会被强制跳转,第三,图片等静态资源地址如果也是http,同样会被拦截,要一并替换成https。
Q3:微信小程序服务器配置用http,开发版和正式版配置方式一样吗?
不一样,开发版是在开发者工具里勾选“不校验合法域名”后直接填http地址,不经过后台域名配置,正式版必须在小程序管理后台配置https请求域名,且一个域名一天最多只能修改5次,所以线上域名要提前规划好。
配置这件事,逻辑理顺了其实不复杂,开发环境用http + 跳过校验,线上环境用https + 后台合法域名,两条路分开走,各管各的,你的小程序请求就不会迷路。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/692919.html


