背景:在一次项目生产上线中遇到地址在IOS版本的app中打不开或者接口请求不返回的情况,在安卓机和PC上表现正常,经排查,问题出在http请求上,原因详解

在早期PC上和安卓手机上比较不严格,在https页面中访问http的接口还是能通,但是在新IOS上https下的网页只能访问https的接口和地址,不然js和图片都会显示异常

1、HTTPS下不能调用HTTP静态资源:

  浏览器默认是不允许在HTTPS里面引用HTTP资源的,一般都会弹出提示框,用户确认后才会继续加载,用户体验非常差。而且如果在一个HTTPS页面里动态的引入HTTP资源,比如引入一个js文件,会被直接block掉的。Chrome 21之后,在SSL加密页面embed非SSL的Flash会怎样呢?会被默默的屏蔽掉,只留下一句console报告。浏览器为了安全,https下跨协议调用http的是不行的,控制台里会有警告。所以你只能去找https协议的 css、js资源了。也有文章说https页面中可引用http的图片,我试了一下,发现虽然不会报红错,但是会有黄色的提醒。最好的方法是使用https的资源。

2、HTTPS下不能调用HTTP的异步请求:

  如果在https的页面中使用http的ajax调用。会提示跨域的报错,很明显有违ip地址、端口、协议的跨域限制。有两种方案:其一试调用https的ajax,既然页面都升级到https了那么服务接口升级也是应该的。其二既然跨域了,我们可以考虑jsonp的方案,但是jsonp 发出的是js文件请求(再次强调jsonp和ajax是两回事)。所以同上一个问题https中应用静态资源也必须是https的。所以即使是jsonp的方式也要提供jsonp接口的服务器支持https。看来异步请求也要升级到https才行。

a标签好不好用?

  这个还是好用的,即使是https的页面也可以跳转到http的链接。

未知情况下,需要兼容2种协议:

  以“//”开头表示相对协议,页面使用的是什么协议,文件请求也自动是什么协议。

根据页面的情况加入协议,拼装成完整的url:

  window.location.protocol

使用 HTTPS 协议主要是为了保护用户隐私,防止流量劫持。但是可能会影响百度搜索录入

 

posted on 2017-11-20 11:40  小海豚Dolphins  阅读(858)  评论(0编辑  收藏  举报