Android应用WebView加载HTTP站点报ERR_CLEARTEXT_NOT_PERMITTED如何解决
解决方案
根因分析
你遇到的net::ERR_CLEARTEXT_NOT_PERMITTED是Android 9(API 28)及以上版本的默认限制:系统默认禁止所有未加密的HTTP明文流量,你的配置未生效原因如下:
- 当你同时配置了
android:usesCleartextTraffic和自定义networkSecurityConfig时,manifest里的usesCleartextTraffic配置会被覆盖失效,优先级以网络安全配置文件为准 - 你当前的
network_security_config.xml仅配置了域名的信任锚,没有显式允许该域名的明文流量,因此限制仍然生效 onReceivedSslError未触发是因为该错误是系统网络层拦截明文流量导致,还没有进入SSL证书校验的流程,因此不会回调该方法
可行解决方法
按优先级从高到低排列:
1. 最优方案:给站点配置HTTPS证书(一劳永逸)
现在免费的SSL证书申请非常便捷,直接给你的站点部署证书后,将链接前缀改为https://即可正常加载,不需要修改任何应用配置,也符合Android官方的安全规范,避免后续可能的明文流量安全风险。你可以先直接测试https://retirementcalculatoraustralia.com/privacy-policy.php是否能在浏览器打开,大部分云服务商/虚拟主机商现在都会默认给新上线站点配发免费证书,大概率可以直接使用。
2. 修改网络安全配置,允许对应域名的明文流量
调整你的network_security_config.xml内容,在domain-config节点添加android:cleartextTrafficPermitted="true"属性:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config android:cleartextTrafficPermitted="true"> <domain includeSubdomains="true">retirementcalculatoraustralia.com</domain> <trust-anchors> <certificates src="system"/> </trust-anchors> </domain-config> </network-security-config>
修改后重新编译安装应用即可生效。
3. 临时全量允许明文流量(不推荐,仅用于测试)
如果你只是临时测试,可以删掉manifest里的android:networkSecurityConfig配置,仅保留android:usesCleartextTraffic="true",即可全局允许所有HTTP明文流量,但该方案不符合安全规范,不建议正式上线使用。
额外排查点
如果修改后仍然无法加载,可以检查以下配置:
- 确认你的应用
targetSdkVersion是否≥28,低版本系统默认不会限制明文流量 - 确认应用已经声明了
android.permission.INTERNET权限,没有网络权限也会导致加载失败 - 清除应用缓存后重新测试,避免旧的网络配置缓存影响
内容的提问来源于stack exchange,提问作者Lorna from Perth
相关产品推荐
相关产品推荐

