关闭

https http 混合访问_https 页面中引入 http 资源的解决方式

时间: 2018-04-03阅读: 12210标签: 资源

解决android 5.0 webview不能加载http与https混合内容的问题

在使用WebView加载https资源文件时,如果认证证书不被Android认可,那么会出现无法成功加载对应资源问题。那么,我们就要针对这一状况作出对应的处理。


1、解决方法:启用mixed content  ,webview默认不允许加载http与https混合内容:

比如你访问的网页为http://xxx.com/a.html,则如果a.html包含了https的资源,则此资源不会显示。如果仔细观察log,可以看到如下的内容提示:

********was loaded over HTTPS, but requested an insecure image********

该怎么解决呢?很简单,只需设置webSettings,允许其加载混合网络协议内容即可。  

//webview在安卓5.0之前默认允许其加载混合网络协议内容
// 在安卓5.0之后,默认不允许加载http与https混合内容,需要设置webview允许其加载混合网络协议内容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

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

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

 

2、解决方法:设置WebView接受所有网站的证书

在认证证书不被Android所接受的情况下,我们可以通过设置重写WebViewClient的onReceivedSslError方法在其中设置接受所有网站的证书来解决,具体代码如下: 

webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view,
                    SslErrorHandler handler, SslError error) {
                // TODO Auto-generated method stub
                // handler.cancel();// Android默认的处理方式
                handler.proceed();// 接受所有网站的证书
                // handleMessage(Message msg);// 进行其他处理
            }
});

注:在重写WebViewClient的onReceivedSslError方法时,注意一定要去除onReceivedSslError方法的super.onReceivedSslError(view, handler, error);,否则设置无效。 

 

解决浏览器默认是不允许在 https 里面引用 http 资源

浏览器默认是不允许在 https 里面引用 http 资源的,一般都会弹出提示框。  


用户确认后才会继续加载,用户体验非常差。而且如果在一个 https 页面里动态的引入 http 资源,比如引入一个 js 文件,会被直接 block 掉的。Chrome v21 之后,在 SSL 加密页面 embed 非 SSL 的 Flash 资源也会被默默的屏蔽掉,只留下一句 console 报告。


1、解决方法:让网站同时准备了 https 资源和 http 资源,通过相对协议的形式访问:

<img src="//domain.com/img/logo.png">

简而言之,就是将URL的协议(http、https)去掉,只保留//及后面的内容。这样,在使用https的网站中,浏览器会通过https请求URL,否则就通过https发送请求。

附注:如果是浏览本地文件,浏览器通过file://协议发送请求,导致请求失败,因此本地测试最好是搭建一个本地服务器。


2、解决方法:将http请求转成https请求,添加响应头,设置mate如下:

<meta http-equiv='Content-Security-Policy' content='block-all-mixed-content'>

或者在我们服务器响应头中加入:

header("Content-Security-Policy: upgrade-insecure-requests");

我们的页面是 https 的,而这个页面中包含了大量的 http 资源(图片、iframe等),页面一旦发现存在上述响应头,会在加载 http 资源时自动替换成 https 请求。  


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/583

关闭

移动web资源整理

首先了解下移动web带来的问题:设备更新换代快——低端机遗留下问题、高端机带来新挑战,浏览器厂商不统一——兼容问题多,网络更复杂——弱网络,页面打开慢,低端机性能差——页面操作卡顿,HTML5新技术多——学习成本不低,未知问题——坑多

理解 CORS (跨域资源共享)

浏览器强制执行同源策略,拒绝不同站点的网站访问。同源策略不会阻止对其他源的请求,但是会禁用对 JS 响应的访问。CORS 标头允许访问跨域响应。CORS 与 Credentials 一起时需要谨慎。

NodeJS如何充分利用多核CPU的资源

单个 Node.js 程序的实例仅在一个线程上运行,因此无法充分利用 CPU 的多核系统。有时你可能需要启动 Node.js 进程集群来利用本地计算机或生产服务器上的每个 CPU 内核。在处理 API 或基于 ExpressJS 的HTTP服务器时,这个问题尤其重要。

http访问控制(CORS)

前后端分离会带有很多优势,也是当今开发的主流方向,但是也会有些小问题,比如跨域。那什么是跨域呢?很简单的,比如,我在开源中国去访问百度的资源,那就是跨域,只要资源提供方和当前地址不一致就是跨域请求

分享最全的前端资源

专门搜集整理前端工作中遇到的各种问题、解决方案、新技术和热门工具插件等,为前端程序员提供一个学习交流的平台 :团队组织、开发社区、前端门户、前端大牛

在 HTML 中包含资源的新思路

只要我一直工作在 Web 上,就需要一种简单的 HTML 驱动方式,将另一个文件的内容直接包含在页面中。 例如,我经常希望向页面添加额外的 HTML,或者嵌入 SVG 文件的内容,以便我们可以为其设置动画和样式。

现在要这样才能搜索到网盘上的资源:site命令获取网上资源

如何更好地使用搜索引擎找到我们需要的资源,目前百度搜索,谷歌搜索都屏蔽了搜索结果的显示,目前可以使用的浏览器ping或者Duckduckgo。

TypeScript的学习资料_ TypeScript资源集

TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集 ,TypeScript 扩展了 JavaScript 的句法,所以任何现有的 JavaScript 程序可以不加改变的在 TypeScript 下工作。

前端开发常用免费资源,显著提升工作效率

最近几个月我收集了大量可以显著提升开发效率的资源链接,在这篇文章中我会分享其中一些。这些资源对我很有帮助,希望对你也是如此

vue打包后静态资源图片失效

老版本中需要找到config/index.js,找build打包对象里的assetsPublicPath属性,默认值为/,更改为./就好了;新版本中只有手动更改vue.config.js, 在里面配置publicPath即可

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!