uni-app不提供全局https开关,需确保所有接口url以https://开头并由后端支持tls;http失败源于平台策略:h5要求安全上下文、小程序强制https白名单、app端ats/明文流量限制;有效方案是封装请求函数统一 baseurl、环境变量驱动、拦截器校验及ci/cd扫描。

uni-app 本身不提供“全局开启 HTTPS 请求”的开关——它不干预你发出去的请求协议,uni.request、uni.uploadFile 等 API 完全按你写的 url 字符串来决定用 HTTP 还是 HTTPS。所谓“全局开启 HTTPS”,本质是你得确保所有接口地址都以 https:// 开头,且后端服务真正支持 TLS。
为什么 uni.request 发 HTTP 会失败?
这不是 uni-app 的限制,而是现代浏览器和小程序平台的强制策略:
- Web 端(H5):Chrome、Edge、Safari 对
getUserMedia、Geolocation、ServiceWorker等敏感 API 要求页面必须运行在安全上下文(HTTPS 或 localhost),但uni.request本身发 HTTP 请求仍可成功——除非后端明确拒绝(如 CORS 配置只允许 HTTPS 来源); - 微信小程序:所有
request域名必须在manifest.json的"mp-weixin"→"permission"→"scope.address"等字段中声明,且必须是 HTTPS 协议白名单域名,HTTP 直接被拦截并报错request:fail url not in domain list; - App 端(iOS/Android):iOS ATS(App Transport Security)默认禁止 HTTP 请求,Android 9+ 也默认限制明文流量,未配置会直接断连或静默失败。
manifest.json 中的 network 配置只影响白名单,不改协议
很多人误以为在 manifest.json 里配了 "network" 就能“强制 HTTPS”,其实它只做两件事:
- 声明允许访问的域名(如
"https://api.example.com"),不写 HTTPS 前缀会被忽略; - 对 iOS/Android 打包时生成对应平台的网络权限配置(如 iOS 的
NSAppTransportSecurity),但不会把http://api.example.com自动转成 HTTPS。
所以如果你的代码里写了 url: "http://api.example.com/login",哪怕 manifest 里白名单写了 https://api.example.com,请求依然会因协议不匹配被拦截。
真正有效的“全局 HTTPS”落地方式
不是靠配置开关,而是统一管控请求入口:
- 封装请求函数:在
utils/request.js中统一拼接 base URL,例如:const BASE_URL = 'https://api.example.com';export function request(options) { return uni.request({ ...options, url: BASE_URL + options.url });}所有调用都走这个函数,就天然规避了手写 HTTP 的风险; - 环境变量驱动:在
vue.config.js或vite.config.js中根据process.env.NODE_ENV注入不同 base URL,开发用https://localhost:7000,生产用正式域名; - 拦截器预处理(推荐):用
luch-request或axios封装时,在request.interceptors.request.use中检查config.url是否以http://开头,是则抛错或自动替换 —— 这能第一时间暴露遗留的 HTTP 地址; - CI/CD 层校验:加一条脚本扫描项目中所有
.js、.ts文件,grepurl:\s*["']http://,发现即阻断构建,从流程上杜绝漏网之鱼。
容易被忽略的关键点
即使你把所有请求都改成 HTTPS,还有三个地方常踩坑:
- 后端返回的跳转地址、图片
src、重定向Location头如果含 HTTP,前端无法拦截,用户点击或自动加载仍会失败; - 本地调试时用了代理(如
devServer.proxy),代理目标如果是http://127.0.0.1:3000,那最终发出的仍是 HTTP,需确保代理目标也是 HTTPS; - 微信小程序要求每个子域名都要单独白名单,比如
https://a.api.example.com和https://b.api.example.com必须分别写进 manifest,漏一个就 404。











