WebView中Http和Https混合问题

场景复现:

在Android5.0 以及以上的系统,当WebView加载的链接为Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来,在浏览器中的Console会有如下警告log:

The page at 'https://***********/test.html?userName=26535fd656sdf966339eecc013esfd91' was loaded overHTTPS, but requested an insecure image 'http://***********/images/demo1.png'. This content shoud over HTTPS.

原因:

从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。

知识储备:

从Android5.0以后,当一个安全的站点(https)去加载一个非安全的站点(http)时,需要配置Webview加载内容的混合模式,一共有如下三种模式:

  • MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。
  • MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。
  • MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。

分析:

在Android5.0以下,默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http。

虽然官网给出的建议是,为了安全考虑,使用MIXED_CONTENT_NEVER_ALLOW模式,但是在实际引用中,当我们的服务器已经升级到Https,但是一些页面的资源是第三方的,我们不能要求第三方也都升级到Https,所以我们只能根据系统版本,用代码去设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW。

解决方法:

在webview加载页面之前,设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
     webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AppWebView是一个嵌入式的浏览器,它是嵌入在原生应用的浏览器引擎。与传统浏览器不同,WebView只是原生应用的可视化组件,用于展示从服务器获取的内容,而不需要存储在本地。它具有灵活性,可以重用浏览器端的web应用和希望展示在原生应用的web应用代码。在WebView运行的JavaScript代码可以调用原生系统的API,没有传统浏览器沙箱的限制。这意味着开发人员可以在WebView实现与原生应用代码的相互通信,并调用原生API集成系统级功能,如传感器、存储、日历、联系人等。WebView可以用于多种用途,包括作为app内置浏览器、显示广告、承载app内的所有交互等。从部署和更新的角度来看,WebView提供了方便的混合应用开发方式。\[1\] 在使用WebView时,可以采取一些优化方法。一种方法是在客户端刚启动时初始化一个全局的WebView,并隐藏起来。当用户访问WebView时,直接使用这个WebView加载对应网页并展示,这样可以减少WebView在App的首次打开时间。然而,这种方法可能会带来额外的内存消耗和内存泄漏的风险。另一种方法是在客户端初始化WebView的同时,由原生应用开始网络请求数据,并在页面初始化完成后向原生应用获取代理请求的数据。这种方法可以并行进行数据请求和WebView初始化,从而缩短总体的页面加载时间。\[3\] 总之,WebView是原生应用的嵌入式浏览器引擎,可以展示从服务器获取的内容,并具有与原生应用代码的交互能力。在使用WebView时,可以根据需求采取优化方法来提升性能和用户体验。\[1\]\[3\] #### 引用[.reference_title] - *1* [手机app开发可选技术——webview](https://blog.csdn.net/manerzi/article/details/127622731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [APPWebView性能优化](https://blog.csdn.net/u013372487/article/details/73065729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值