Android Studio Java开发中WebView无法打开HTTP链接如何解决?
Android WebView无法加载HTTP明文资源解决方案
该问题的根本原因是Android 9.0(API Level 28)及以上版本系统默认禁止应用使用未加密的HTTP明文流量,所有HTTP请求都会被系统拦截,只有HTTPS加密流量可以正常通行。
可根据实际场景选择以下解决方案:
方案1:全量升级为HTTPS协议
官方推荐的最优方案,将应用需要加载的所有页面、视频、静态资源链接都替换为HTTPS协议,无需修改任何应用配置,同时可以保障通信安全,适配所有系统版本。方案2:全局允许明文流量
适合测试场景或暂时无法完成HTTPS升级的情况,只需在AndroidManifest.xml的<application>标签中添加如下属性即可:<application ... android:usesCleartextTraffic="true" ...>方案3:自定义网络安全配置(仅开放指定域名的HTTP权限)
比全局开放更安全的配置方式,仅给需要加载HTTP资源的特定域名开放明文权限:- 在
res/xml目录下新建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <!-- 替换为你需要允许HTTP访问的域名,includeSubdomains为true表示同时允许子域名 --> <domain includeSubdomains="true">example.com</domain> <domain includeSubdomains="true">your-cdn-domain.com</domain> </domain-config> </network-security-config>- 在
AndroidManifest.xml的<application>标签中引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...>- 在
方案4:WebView混合内容适配(解决HTTPS页面内嵌HTTP资源的问题)
如果是HTTPS页面中嵌入了HTTP视频、图片等子资源无法加载,需要额外给WebView开启混合内容权限,初始化WebView时添加如下配置:// 允许HTTPS页面加载HTTP类型的子资源 webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);可选参数说明:
MIXED_CONTENT_ALWAYS_ALLOW表示允许所有混合内容,MIXED_CONTENT_COMPATIBILITY_MODE表示仅允许系统判定为安全的必要混合内容,安全性更高。注意:全局开启明文流量、允许所有混合内容都会降低应用的通信安全性,容易引发数据窃听、篡改等风险,生产环境建议优先选择HTTPS全量升级、指定域名开放权限的方案。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

