Android WebView自动将HTTP请求转为HTTPS报net::ERR_SSL_PROTOCOL_ERROR如何解决
Android WebView加载HTTP资源自动转HTTPS报错解决方案
即使已经配置明文流量权限,该问题通常由WebView自身安全策略、HSTS规则、服务端/前端跳转逻辑导致,可按以下方案排查解决:
- 调整WebView基础配置
关闭WebView默认的HTTP资源自动升级、混合内容拦截策略:WebSettings webSettings = webView.getSettings(); // 允许HTTP和HTTPS混合内容加载 webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // Android 10及以上版本禁用HTTP自动升级 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { webSettings.setAllowHttpContent(true); } - 重写WebViewClient拦截跳转
主动拦截URL加载逻辑,避免系统自动将HTTP转为HTTPS加载,针对性处理SSL协议错误:webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String targetUrl = request.getUrl().toString(); // 原始请求为HTTP时强制加载对应地址,不执行默认跳转逻辑 if (targetUrl.startsWith("http://")) { view.loadUrl(targetUrl); return true; } return super.shouldOverrideUrlLoading(view, request); } // 测试环境可使用该配置处理HTTP转HTTPS导致的SSL错误,生产环境请勿全局忽略SSL错误避免安全风险 @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { if (error.getPrimaryError() == SslError.SSL_PROTOCOL_ERROR) { handler.proceed(); } else { handler.cancel(); } } }); - 排查域名与服务端配置
- 确认目标域名未被加入系统HSTS预加载列表,加入该列表的域名会被全局强制走HTTPS,可更换测试域名解决
- 检查服务端是否配置了301/302跳转规则,强制将HTTP请求跳转至HTTPS,如有需要调整服务端配置
- 检查返回的HTML页面中是否存在JS跳转HTTPS的前端逻辑,如有修改对应前端代码
- 验证明文流量配置
确认android:usesCleartextTraffic="true"属性正确配置在AndroidManifest.xml的<application>根节点下,若应用使用了自定义网络安全配置文件,需在文件中明确放行对应域名的明文流量权限。
内容的提问来源于stack exchange,提问作者Amish Gupta
相关产品推荐
相关产品推荐

