迁移原因
隐私
使用HTTPS的时候,网络供应商(ISP)无法追踪用户所查看的页面。这意味着我们可以帮助读者提高隐私的安全性。这与我们的核心价值观相符。我们相信,保护访客的隐私是我们应该做的事情。
安全
使用HTTPS,能阻止第三方在我们的网站上嵌入代码,或是对我们的用户进行追踪。
SEO
HTTPS还能提高我们的搜索结果效果。谷歌已经宣布,他们将优先收录HTTPS内容。
内容真实性
使用HTTPS,浏览器能够确保所展现的内容确实是卫报所发出的。如果没有HTTPS,一些隐身于用户浏览器和我们的网站之间的人,能够展示其他内容,或是对我们的内容进行修改。
新功能
HTTPS能让我们利用一些新兴的技术,例如service wokers、web通知、添加到主屏幕等。这些新功能可以进一步加强我们和受众之间的联系,尤其是那些无法现在卫报手机端应用的读者,例如来自南美和印度的读者。
提高营收
使用HTTPS之后,网络服务提供商无法在未经我们允许的情况下在页面中强制插入广告并且从中获利。
为何用了这么长的时间?
在迁移之前,我们面临着下面这些挑战:
避免给营收带来影响
很长一段时间以来,广告代理商和广告交换网络都没有接受HTTPS,因此任何有意切换至HTTPS的网站,其营收都会受到影响。尽管谷歌希望在这个问题上采取行动,但是任何负面影响的出现,都会让我们难以承受。
继续允许在文章中嵌入媒体
我们的文章经常会含有多种外部原件,例如YouTube视频和Twitter消息等。为了这些内容,我们必须要找到一个方式将其嵌入到HTTPS页面的文章中,因为一些内容提供方并不支持HTTPS。
让此前的互动继续工作
过去多年来,我们并没有考虑过HTTPS,很多文章中的互动内容使用了多种不同的技术,我们需要保证这些互动内容在HTTPS下依然可以正常工作。
方法与技巧
此次迁移是一个巨大的工程,因此我们不可能在一开始就预料到所有可能出现的问题,也无法为每一个问题都确定解决方案。只有当问题浮出水面之后,我们才能一个一个的将它们解决。
因此,我们并没有预先制定周密的计划,而是再去了逐个击破的方式:
- 先将一个网站版块迁移到HTTPS页面下
- 发现问题并且追踪这些问题
- 在下一轮迁移开始之前,将出现的问题解决
这种策略的好处之一,就是它能让我们探测到真正的问题,而不是把自己所在会议室里,靠想象力去猜测。而且在不断解决小问题的过程当中,我们逐渐积累了自信。
在这个过程当中,我们使用了下面3个技巧:
监测
在每一次用户迁移之后,我们都会仔细监测用户数字、营收、混合内容警告和各种错误信息。
后端与前端分开迁移
我们采取的方式是先迁移后端,再迁移前端。我们的内容API会提前为所有内容返回HTTPS链接,然后我们会在相对早期的阶段对内部工具进行升级与整合。这样做的好处是,我们可以在迁移到HTTPS的过程中,将所有问题都限制在网站本身,以便我们快速发现问题。
早期接受者的使用情况
我们向用户开放了一个功能,允许他们手动打开一个选项:让这个网站都使用HTTPS。这些早期接受者能够向我们提交错误报告,供工程师去修复。在迁移过程中,有多个问题都是用户帮助我们发现的。
技术细节
有条件的重定向至HTTPS
在迁移的过程中,我们借助了CDN供应商的力量,让我们可以基于请求的路径来轻松编写快速重定向规则(我们的路径中包含了文章所在的版块)。
我们使用了这个方法而没有使用upgrade-insecure-requests功能主要有两个原因。第一,这个功能并没有被足够多的浏览器所支持。第二,upgrade-insecure-requests的说明过于复杂。因此upgrade-insecure-requests功能对我们的实用意义不大。
采用report only的Content-Security-Policy
这个功能让我们可以记录所有混合模式警告与错误,并且在日后进行分析。而被动内容依然会显示,从而将对用户的影响实现最小化。不久之前,我们切换回了block only,因为我们已经确信不会再对用户产生任何影响。
旧内容的重写
为了迁移此前的互动内容,我们写了一个简单的脚本,将一个预先定义好的url列表升级到HTTPS。在打开HTTPS之前,我们将存档中的大部分互动内容都进行了迁移。
HSTS header
HTTP Strict-Transport-Security响应header能让一个网站告知浏览器不要使用HTTP加在网站,而是自动尝试使用HTTPS请求进行加载。这个功能的目的是保护用户和网站不会受到中间人攻击,例如SSL Stripping。
在将所有版块都迁移到HTTPS上之后,我们添加了这个header,因为我们确信添加这个header并不会产生任何消极营销。
移除短url
在Twitter不再计算url字符长度之后,url就丧失了其实用性。我们所使用的url也给我们的加载速度造成了影响,因为它会强迫浏览器进行三次重定向。在使用HTTPS的时候,你应该避免同时使用短url,因此我们移除了所有短url。