Stack Overflow迁移到全站HTTPS
发布日期:2017-06-19Stack Overflow是一个与程序相关的IT技术问答网站,面向编程人员群体。虽然网站并不涉及资金交易和信用卡支付,但为了获取HTTP/2带来的性能优势,最终Stack Overflow决定实现全站HTTPS加密,以下是其迁移HTTPS的策略与实践。
StackOverflow的首席架构师Nick Craver发表了一篇博文,宣布StackOverflow迁移到HTTPS。在该过程中,他们经历了一些技术挑战,包括:
- 对数百个域的支持
- URL迁移
- 用户生成内容的处理
- 如何达到网站所需的严格性能需求
性能是首要驱动力
这次迁移总体上历时四年,但Craver强调,该工作一直以来都并非是工作重点。例如,网站上并不存在财务信息或是信用卡支付,网站信息也并非需安全防护的高价值信息。Craver指出,事实上,StackOverflow总是将性能置于安全之上:
“我应指出,性能是我们的首要驱动力,而非网站的安全性。虽然我们也需要安全性,但是安全本身并不值得我们付出对整个网站部署HTTPS所花费的时间。”
Craver解释说,HTTP/2的广泛采用及在性能上的优点是他们升级到HTTPS的主要驱动力。
这些优点包括:Request/Response多路复用(Multiplexing)、服务器推送技术(Server Push), 头部压缩(Header Compression)、数据流优先(Stream Prioritization)和更少的域(Origin)连接等。
由于浏览器并不支持在HTTP上实现HTTP/2,因此迁移到HTTPS不仅是一个性能上的需求,同时也是一个安全上的需求。
HTTPS迁移策略
StackOverflow具有上百个域和子域。站点的主证书中包括了StackOverflow的全部主域,以及通配符域名。在这种多个域的证书和IP一致的情况下,可利用HTTP/2提供的机制,支持浏览器对多个域使用单一的共享连接,这将提高性能。
在转向HTTPS的过程中,还需要做一些域迁移工作。例如,需要将“meta”域从“meta.*.stackexchange.com”转化为“*.meta.stackexchange.com”。Craver特别指出,这样做是因为通配符必须位于域名的最左边,单一的通配符更易于维护。
此外,网站中的敏感cookies现在是从顶级域继承而来的,原先可访问它们的域已经被移动了。Craver给出了一个例子,“SendGrid”标签现已移动到“stackoverflow.email”域中。
Craver还指出,网站中存在着大量HTTP用户生成内容,例如提问中给出的图片、用户配置信息、Youtube视频等。在迁移时所采取的第一步,是对所有新的用户生成内容强制使用HTTPS,将HTTP内容限定为遗留内容。然后,下一步是对遗留内容的迁移。其中的大部分内容仅需要进行查找并替换即可。对于那些团队把握不准的内容,如果内容工作异常,那么它或者被转化为HTTPS,或者被转化为一个链接。
JavaScript代码中也存在着数以千计的链接,这些链接基本上是使用HTTP的,甚至位于不同的“meta”域中。据Craver介绍,他们是逐个代码分别处理的,使用“
Craver强调,他们也非常重视避免丢失任何来自Google的流量,这是网站流量的重要来源,因而也是网站收入的主要来源。尽管Google所需的更改非常简单(将HTTP 301跳转为HTTPS,并更新权威链接),团队也必须要慎重,以免犯错误。
迁移最后还会涉及WebSocket,需要将所有事情转换为WebSocket加密,这也是为避免影响网站性能而在功能上的直接需要。据Craver介绍,他们可一次同时打开近五十万个并发的WebSocket连接。
该博文的内容很长,但是值得一读。
译文来源:InfoQ 查看英文原文:https://www.infoq.com/News/2017/06/stackoverflow-https
相关资讯:
HTTP/2.0(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTPS/2.0将比HTTP 1.1传输速度更快,由于强制使用https加密...
HTTP 1.1即将退出历史舞台,HTTP/2携手HTTPS迎来发展春天
HTTP/2是十多年来HTTP协议的首次升级,它带来了许多改进:多路复用,服务器推送,头压缩,并且需要设置多个TCP连接。HTTP / 2将只与HTTPS工作, 所有主流...
Firefox 35是第一个默认开启支持HTTP/2协议的浏览器。Google现在在其服务器上同时支持了HTTP/2第14版草案和SPDY协议,这就给了我们一个基于同一个网页...