我们的业务主要为两块,首先是h5商城,在商城里面会有很多很多的运营活动,点击进去是在后台配置的各种H5活动链接。而H5商城和运营活动是两个业务,两者的联系就是要在后台系统将运营活动的链接配置到商城中。

在说下我们商城的购物车,当用户进行相应的加车、减车或其他操作的时候,此时是将用户的购买信息保存在本地的,即保存在localStorage中。

昨天商城上线,上线后,通知我们将图片链接都替换成https的。

购物车被清空

当商城项目上线后,业务反馈出现一些问题:

客户使用我们的商城添加了一些商品,然后进行了一些其他操作,之后返回到购物车,发现之前添加的商品没有了,找不到了。

当时我们认为是不是用户触发了清空购物车的操作,但实际上并没有,后来PM操作了一些步骤啊,复现了这个问题。

原来是用户在商城中浏览商品并添加到购物车,然后进入到了运营活动页面,从运营活动页面又返回到了商城,此时购物车商品便丢失了。

此时已经有眉目了,商城上线后已经迁到了HTTPS中,但是后台配置的运营活动的链接还是HTTP的,所以,从HTTPS的商城进入到了HTTP的活动页面中,从HTTP的活动页面又进入到了HTTP的商城中,所以,此时的页面是HTTP的,不是迁移后的HTTPS的。

另外,localStorage也是遵循同源策略的,http与https是两个不同的源,所以在https站点添加的localStorage在http站点内是读不出来的,所以就出现了上面的问题。

图片不显示

当在后台中将所有的http的配置换成https后,已经解决了上面的问题,但还有些问题存在,比如我的页面是https了,但是页面中的图片链接还是http的,此时浏览器会抛出警告:

Mixed Content: The page at 'https://m.xxx.com/re-cms-market/?id=40&t=1498815598619' was loaded over HTTPS, but requested an insecure image 'http://ygres.xxx.com/c6c1d5a1a3345ab0ecac30'. This content should also be served over HTTPS.

意思就是说,这个页面是混合页面,既有https,又有http。主页是https,但是请求的内容却是不安全的http,那么在chrome上,会自动转为https请求,但是在有些手机浏览器上,如果https页面有中http请求的话,此时图片是不展示的。

所以还需要把所有的内容中出现的请求(主要是图片)切换到https。

微信支付异常提示

当整个站点切换到https后,请务必检查是否在其他地方有配置URL,比如:微信支付授权目录,或者其他授权目录。否则,在支付微信支付时会提示:“当前页面的URL未注册...”。

处理方式

因为出现这么多问题,而且又有双购物车问题,所以最后后端进行了处理,把http的访问重定向到https的,解决两个站点的问题,统一入口为https。

反思与思考

这个过程中出现一些问题,比如项目间的合作,将http切换到https这个事应该提前通知相关业务方,做好提前切换,提前测试。当然不能要求别人做太多,突出问题还是在于我没有主动去了解商城版本的变动,从而思考对我们运营活动这边有没有影响。

另外一个问题在于,自己对从http切换到https会产生的问题不清楚。自己往往会想切换后页面更安全了,请求可能稍微会慢那么一点等等,不会去想到同源策略,也不会想到混合协议的页面问题,这属于自我经验以及知识的短板,需要不断总结与学习。

下面是根据本次事情做的一些总结与实践方案:

项目间合作层面

  • 1、梳理自身业务与其他业务的联系,要知道别人的哪些业务变动会影响我我们自身的业务
  • 2、当相关业务有版本变动时,要及时去了解该版本的变动情况,涉及到自身业务变动时要及时更改,以免发生严重问题

技术层面

  • 1、之前图片上传到阿里云,返回的是完整的图片链接,我们把图片链接存到数据库中,这种方式会导致后期切换异常麻烦,会涉及到老数据修复,所以这种方式要更改,只保存图片id
  • 2、保存为图片ID后,各个业务独立维护图片的base_url,后期如果有切换则统一切换
  • 3、base_url格式应该是://:xxx.com/,不能携带协议部分,要不然测试环境是http,线上是https,开发上线时的切换也很麻烦
  • 4、安排http以及https的学习计划,对相关细节进行学习与总结

总结

如果大家也要切换到https的话,一定要做好以下几点:

  • 1、通知相关业务方提前切换,并进行确认
  • 2、仔细思考自身业务中有没有涉及到同源策略问题
  • 3、确保站点与站内的请求都是https的请求

总之就是提前通知、提前测试、提前确认,不要等到上线了在做这些事情。

谨慎升级到HTTPS的更多相关文章

  1. 从 http 升级到 https 过程中遇到的一些问题

    Apple 2017年1月1号起要求Appstore 上线的应用都必须使用 https 加密请求协议,在二月份又改为建议 从 http 升级为 https 协议,此为背景. 公司做的APP同时在App ...

  2. 网站通信协议升级到HTTPS&HTTP2

    为何要升级到HTTPS和HTTP2? http://baijiahao.baidu.com/s?id=1602041305989767011&wfr=spider&for=pc htt ...

  3. nodejs从http升级到https(阿里云证书的使用)

    升级原因 1.各大搜索引擎中,https的网页的权重比一般的http的网页权重要高. 2.从用户体验的角度,一个老是被浏览器提醒该网页不可信的网页,总不会让用户感到安心 所以将网站从http升级为ht ...

  4. 全站从http升级到https(WordPress博客)

    最近几年HTTPS取代HTTP已经成为大趋势,HTTP是超文本传输协议,信息是明文传输的,而HTTPS是安全超文本传输协议,需要证书和提供安全连接,换句话说,HTTPS是嵌套了SSL加密的HTTP连接 ...

  5. Http升级到Https (本地测试,无须域名和认证)

    在之前的语音识别的项目中,一切都在本地进行得很顺利,然后把写的Demo部署到服务器上给老大看的时候,通过IP访问(http://192.168.145.170:8080这样的形式)时,从一开始就坏掉了 ...

  6. 网站如何从http升级成https

    基本概念: HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少. HT ...

  7. 什么是https?http升级为https需要什么?

    一.什么是https? https是一种加密传输协议,网站使用https后可以避免敏感信息被第三方获取.https加密协议=SSL / TLS+http协议,也就是说,在传统的http协议上加上SSL ...

  8. nginx将http升级到https并且同时支持http和https两种请求、http自动转向https

    1.http升级到https 1.1.检查 Nginx 是否支持 SSL /usr/local/nginx/sbin/nginx -V configure arguments中是否有--with-ht ...

  9. web由http升级为https搭建

    nginx实现http访问 server { listen default_server; listen [::]: default_server; server_name _; root /usr/ ...

随机推荐

  1. POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...

  2. hbase伪分布式安装(单节点安装)

    hbase伪分布式安装(单节点安装) http://hbase.apache.org/book.html#quickstart   1.    前提配置好java,环境java变量     上传jdk ...

  3. OKMX6Q ffmpeg & ffserver

    通过ltib在根文件系统中增加mplayer和ffmpeg后,拟使用ffmpeg从摄像头(/dev/video0)采集视频. 刚开始使用了: ffmpeg -f video4linux2 -s 320 ...

  4. python实现冒泡排序和快速排序

    冒泡排序和快排的python实现: data = [1, 3, 5, 10, 4, 7] times = 0 "冒泡排序" for i in range(len(data)): f ...

  5. JavaScript 字符串与对象互换

    对象转字符串: var str = JSON.stringify(obj); 字符串转对象: var str = JSON.parse(str);

  6. 开始学习 Backbone

    [转]开始学习 Backbone 如何将模型-视图-控制器 (MVC) 架构引入 Ajax Web 应用程序 如何高效管理 Web 应用程序中的数目众多的 JavaScript 代码行是一个挑战.As ...

  7. CSS深入理解学习笔记之float

    1.float的历史 float设计的初衷仅仅是为了文字环绕效果. 示例代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  8. maven核心概念--插件和目标

    maven的核心概念有很多,我们这里先来看Plugins和Goals. 在上一篇博客中,我们用两种类型的命令行参数运行了Maven. 第一条命令,create.这是一条单个的插件目标,Archetyp ...

  9. Intel DPDK 全面解读

    高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络 ...

  10. 【SqlServer系列】浅谈SQL Server事务与锁(上篇)

    一  概述 在数据库方面,对于非DBA的程序员来说,事务与锁是一大难点,针对该难点,本篇文章视图采用图文的方式来与大家一起探讨. “浅谈SQL Server 事务与锁”这个专题共分两篇,上篇主讲事务及 ...