小程序https配置不再难,一文搞定安全请求

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

小程序https配置不再难,一文搞定安全请求

小程序上线第一天,我蹲在工位上盯着手机屏幕,手指在开发者工具里点了又点,后台报错信息刷了一屏又一屏——“http://请求不在合法域名列表中”。那会儿刚做微信小程序,以为把后端接口地址填进去就能跑,结果现实给了我一记闷棍:微信要求所有请求必须走HTTPS,而且域名还得在小程序后台白名单里登记备案。当时手忙脚乱查文档、问同行,折腾了一整天才弄明白。后来带团队做项目,发现几乎每个新手都会卡在这一步,其实这事没那么玄乎,把原理捋清楚,配置起来就是几分钟的事。

先说最核心的一条铁律:微信小程序里,所有网络请求的域名必须是HTTPS协议,而且要在小程序管理后台的“开发设置”里配置“服务器域名”。你直接在代码里写http://开头的地址,微信直接给你拦下来,连请求都发不出去。这条规定从2017年就开始了,目的是防止数据在传输过程中被篡改或者窃听。很多人一开始不理解,觉得本地开发环境跑得好好的,怎么一到真机预览就废了?因为本地调试的时候,开发者工具里有个“不校验合法域名”的开关,默认是关着的,你勾上它就能用http调试,但真机预览和线上版本没有这个开关,必须走正规的HTTPS。

那HTTPS到底怎么配?说白了就三步:买证书、装证书、配域名。证书可以买,也可以申请免费的,比如Let's Encrypt,三个月续一次,很多云服务商也提供免费证书,阿里云、腾讯云都有,一年期,到期自动续。买完证书,你得把它部署到你的服务器上——Nginx、Apache、Tomcat,看你后端用什么。这一步对没碰过运维的人来说有点懵,但其实跟着教程走,复制粘贴几行配置就行。我见过最惨的情况是,有人把证书文件传到服务器上,结果Nginx配置写错了路径,重启服务直接挂掉,页面全白,后台日志刷了一堆“SSL handshake failed”。排查了半天,发现是证书路径少了个斜杠。

证书装好之后,域名也得对得上。微信要求你配置的域名,必须和证书里签发的域名一致。比如你申请证书的时候填的是.com,那小程序后台的“request合法域名”也得填.com,不能填,否则请求发过去,服务器握手的证书域名对不上,照样报错。这个细节特别坑,很多人证书装好了,后台也配了,结果还是调不通,发现是证书绑定的域名和后台填的域名差了那么一个子域。

接下来是后台配置。登录微信公众平台,找到“开发管理”里的“开发设置”,往下拉能看到“服务器域名”这一栏,里面有request、socket合法域名、uploadFile合法域名、downloadFile合法域名四类。做普通接口请求,填request那栏就行;如果是聊天室或者实时推送,需要用到WebSocket,那就得填socket合法域名;上传图片、下载文件,分别对应uploadFile和downloadFile。每一栏最多可以填200个域名,每个域名必须带https://前缀,而且不能带路径,只能填到域名根。填完之后,保存生效,一般几分钟之内就能同步。

这里有个容易踩的坑:很多人以为填了域名就万事大吉,结果开发工具里一跑,还是报“request:fail”。这时候八成是证书链不完整。有些免费证书或者自签名证书,只给了你一张证书文件,没有中间证书,客户端在验证的时候找不到完整的信任链,就会拒绝连接。解决办法是去证书颁发机构下载完整的证书链文件,或者用在线工具检测一下你的HTTPS是否通过了“SSL Labs”的评级,如果显示有链缺失,就去服务器上把中间证书补上。我当年第一次配的时候,就是卡在这一步,折腾到半夜,后来把中间证书合进一个crt文件里,重启Nginx,瞬间通了。

还有一类问题,跟证书没关系,是服务器端口的事。微信小程序默认要求HTTPS走443端口,你用8080或者8443去配HTTPS,虽然技术上可行,但微信后台不让你填带端口的域名——严格来说,域名后面不能带冒号加端口号。所以你必须把HTTPS服务跑在443端口上,或者用Nginx做反向代理,把443端口的流量转发到你实际运行的服务端口上。这个转发配置也不难,在Nginx的server块里加一行proxy_pass就行,但要注意,转发的时候要把Host头带上,不然后端拿不到正确的域名信息,可能会出一些诡异的问题。

做完以上这些,基本就通了。但还有个小细节值得提一下:小程序后台配置的域名,必须是你自己备案过的域名。国内服务器要求域名备案,这是硬性规定,不备案的话,服务器连80和443端口都开不了,更别说给微信用了。如果你用的是海外服务器,可以不用备案,但访问速度会慢一些,而且有时候微信的检测机制会对未备案域名做额外限制。稳妥的做法是,域名在国内服务商备案,服务器也放在国内,这样最省心。

再说个实用技巧:调试的时候,别老盯着手机看,直接用开发者工具里的“模拟器”就行,把“不校验合法域名”勾上,本地随便用http调,等联调通过了,再切回正式的HTTPS环境。另外,如果线上出了“证书过期”的报错,别慌,很多证书都有自动续期脚本,你去服务器上看看定时任务跑没跑,没跑的话手动续一次,再重载一下Nginx配置就行。整个过程熟练了之后,从买证书到跑通,半小时足够。别再被这一关吓住,按着这几步走,安全请求这件事,真没那么难。

原文来自:小程序开发