我们的业务主要为两块,首先是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. JavaScript之BST

    自己尝试用js实现了数据结构的二叉查找树. // node function Node(data) { this.data = data; this.lc = null; this.rc = null ...

  2. C#编写影院售票系统(A project with a higher amount of gold )

    项目需求: 影院售票系统 1.基础设施 放映厅 座位集合 2.一个海报------------>放映计划 3.售票设置----------->观影 领域模型:程序中提炼出的实体 4.从电影 ...

  3. 谈谈Python、Java与AI

    Python好像天生是为AI而生的,随着AI的火热,特别是用Python写的TensorFlow越来越火,Python的热度越来越高,就像当年Java就是随着互联网火起来的感觉.在我的工作中,Pyth ...

  4. protobuf 原理

    Protobuf 的优点 Protobuf 有如 XML,不过它更小.更快.也更简单.你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构.你甚至可以在无需重新部署程序的情况下更新 ...

  5. 修改Weblogic jdk版本

    找到 F:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin setDomainEnv.cmd

  6. tomcat 部署war项目

    前提是 jdk环境已配好 把项目war包放到tomcat的webapps目录下 启动tomcat: 这里我把8080端口修改成了80 IP也修改了 如果没修改直接输入localhost:8080/te ...

  7. 2017-06-28(passwd 主要组与附属组 gpasswd newgrp groups)

    passwd passwd -l 用户名  (锁定用户) passwd -u 用户名 (解锁用户) passwd -d 用户名  (清楚用户密码) 主要组与附属组 一个用户可以同时属于多个组,其中一个 ...

  8. i2c总线的oled12864屏的u8x8运用总结

    github网址链接 https://github.com/olikraus/u8g2/wiki/u8x8reference#print 用到的库文件 #ifdef U8X8_HAVE_HW_SPI ...

  9. scrapy_图片下载

    需要安装第三方库: 安装 pillow库 pip install -i https://pypi.doubanio.com/simple pillow 如何对图片进行自动下载? 首先明白,图片去哪下? ...

  10. java ecplise配置

    运行java项目首先配置java运行时环境:Window->Preferences->Java->Installed JREs 修改为jdk:C:\Program Files\Jav ...