Flutter WebView在Android 6.0设备上出现net::ERR_SPDY_PROTOCOL_ERROR求助
解决Flutter WebView在Android 6.0上出现net::ERR_SPDY_PROTOCOL_ERROR的问题
问题根源
Android 6.0(API 23)自带的系统WebView基于旧版Chromium内核,对SPDY协议的兼容性较差。而现代服务器通常默认启用SPDY/HTTP2协议,导致旧WebView无法完成协议握手,最终触发加载失败。
可行解决方案
1. 强制WebView使用HTTP/1.1
通过配置WebView参数,禁用HTTP2和SPDY支持,强制回退到HTTP/1.1:
WebViewWidget( controller: WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..loadRequest(Uri.parse('https://testsite.com')) ..setOnWebViewCreated((controller) async { if (Platform.isAndroid) { final AndroidWebViewController androidController = controller.platform as AndroidWebViewController; final AndroidWebSettings settings = await androidController.getSettings(); // 禁用HTTP2和SPDY,强制使用HTTP/1.1 settings.setHttp2Enabled(false); settings.setSpdyEnabled(false); } }), )
2. 调整服务器SSL/TLS配置
Android 6.0默认对高版本TLS(1.2+)及部分加密套件支持不足,可要求服务器添加兼容配置:
- 启用TLS 1.0、TLS 1.1协议支持
- 加入Android 6.0兼容的加密套件(如TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA)
3. 引导用户更新系统WebView
Android 6.0的WebView可通过Google Play独立更新,提示用户前往应用商店搜索「Android System WebView」并更新至最新版本,新版内核会修复旧协议兼容问题。
4. 替换为第三方WebView库
若上述方法无效,可使用自带独立Chromium内核的第三方插件(如flutter_inappwebview),摆脱系统WebView版本限制:
InAppWebView( initialUrlRequest: URLRequest(url: Uri.parse('https://testsite.com')), )
内容的提问来源于stack exchange,提问作者Abdul Ahath
相关产品推荐
相关产品推荐

