之前没弄过这块,刚接到需求的时候没怎么考虑就打算直接将全部页面里的http换为https了。。页面少的话还好,多了就不好处理了,即使用工具将整个项目的文件全部替换,因为还要考虑改到https之后页面功能正常。而且在想肯定不应该这么麻烦,会有更好的解决方案
百度查了下可以用CSP设置upgrade-insecure-requests
参考链接https://www.cnblogs.com/hustskyking/p/upgrade-insecure-requests.html,http://www.cnblogs.com/mafly/p/allhttps.html。
可以放在服务器端或者页面头部都可以,如果项目有公共头部的话会比较好改。
服务端:比如apache配置文件里加上Header add "Content-Security-Policy" "upgrade-insecure-requests"
页面:<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
其中遇到了一些问题如下,预计还有些没发现的问题
1、百度推送js不支持https
解决:修改//push.zhanzhang.baidu.com/push.js百度实时推送js为支持https的//zz.bdstatic.com/linksubmit/push.js
2、重复请求问题,一种情况发生在swipe里background属性引用了http链接的图片,一种情况发生在动画里background属性引用了http链接的图片因为页面增加了<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />属性导致动画切换的时候频繁将http转成https请求
解决:background里属性改为https
3、sea.js加载模块失败seajs.use("http://www.xxx.com/main.js")这样引用的时候http是没问题的,但是切换到https的时候seajs.use("https://www.xxx.com/main.js")加载失败,修改为绝对路径方式引用可以了seajs.use("main"),当然config.js要配置base的URL
4、后端配置https不支持三级域名https://a.b.xxx.com
解决:只有手动改咯。