https网页加载http资源致使的页面报错及解决方案

  https是当下的网站的主流趋势,甚至像苹果这样的大公司,则彻底要求用户必须使用https地址。html

  然而对于之前http连接来讲,咱们每每就存在一个兼容性问题,由于你不可能一下就所有切换过去,应该在很长一段时间内,https与http将共存。jquery

  https与http共存的场景有如:浏览器

    1. app已经发布出去,其调用接口的地址为http的,那么这是必须兼容的。安全

    2. app中嵌入了h5页面,而这页面在之前的设计中是使用http访问的,若是换成https地址,极有可能将致使h5页面没法打开。服务器

    3. 对于流量推广一类的业务,可能原有的http推广地址已经发送给第三方,并且即便你通知到第三方要求改成https,也不排除有http地址的访问。app

  针对以上场景,咱们确定是要https与http共存的。网站

  改https初看起来,其实就是一个域名指向的问题,也许咱们只要将http的请求,直接跳转到https地址去,那么也就完成了https的切换。实际并非这么简单的。spa

  由于https地址中,若是加载了http资源,浏览器将认为这是不安全的资源,将会默认阻止,这就会给你带来资源不全的问题了,好比:图片显示不了,样式加载不了,JS加载不了。由于样式类,基本上都是写在本地的,因此通常还能够,可是一些公共的js文件,每每就是存在于cdn或者其余服务器上,这时候,若是访问不了,可能就致使了业务就彻底操做不了。好比:jquery效法加载失败,可能全部的操做、请求都将无效了。设计

  将http请求直接跳转至https请求,是一种解决办法,并且不少公司都是这么干的,好比百度什么的,可是前提是,你全部的服务都已切换https完成。cdn

  可是对于,要兼容https、http两种协议的状况,怎样才能作到呢?

1. 最笨的方法,直接复制原有代码,写成两套代码,一套为http使用,一套为https使用,http和https各自指向各自服务。
2. 可用的方法,用同一套代码,在后台请求标识好协议,将该变量传到html页面中,进行协议替换,如:后台变量,$protocol = 'https://';  前台接收变量 src='{$protocol}res.aa.com/jquery.js'。
3. h5方法,使用js本身加载协议状况,如在body onload='aa()', 在aa() 方法中,将资源按照需求加载进来便可。
4. 推荐方法,不指定具体协议,使用资源协议自适配,好比,当前为https页面,那么就是https资源,若是是http页面,那么就是http资源。具体方法超简单:<script src='//www.aa.com/jquery.js'></script>

  其实就这么回事,只是在线上遇到这种问题,也很无赖啊。若是在公司管理很严的状况下,因为该问题致使的事故,这将是会受到记过处分的。

  自适配是个好东西。

相关文章
相关标签/搜索