对于电商而言,不能因为技术的升级就轻易影响了线上业务,毕竟最宝贵的是用户流量。当我们一鼓作气完成了系统的HTTPS改造和优化后,上线过程则是小心翼翼逐步完成的,毕竟这么大的调整动作牵一发而动全身。从HTTP过渡到全站HTTPS,没有发生一次严重事故,究其原因是我们始终遵守三个原则,即降级原则、灰度原则和开闭原则。
1. 灰度发布
即通过灰度发布的方式,实现HTTP到全站HTTPS的平滑过渡。可以针对不同粒度和维度,按需求进行灰度,比如根据域名、城市运营商、App版本、会员级别等等。通过灰度,同步对比数据分析,逐步放开HTTPS的使用。
对于浏览器的业务,我们在接入层配置HTTP->HTTPS的301跳转,同时开启HSTS。为什么使用301跳转而不使用302?主要是出于搜索引擎SEO的考量。
301 Moved Permanently表示永久性跳转,表示本页面网址永久性转移到另一个地址上。搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
302 Moved Temporarily表示暂时性转移,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。当一个网页经历过短期的URL的变化时适合使用302使用。
因为我们最终是要实现全站HTTPS,因此自然更适合采用永久性的301跳转。
对于移动端App的业务,可以配置客户端开关,每次加载App前先获取开关值。通过版本号+域名清单的方式,控制请求的HTTPS/HTTP切换。比如:
{
"api":"mts.switch.confi