写点什么

StackOverflow 转向默认使用 HTTPS

  • 2017-06-14
  • 本文字数:1312 字

    阅读完需:约 4 分钟

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 不仅是一个性能上的需求,同时也是一个安全上的需求。

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 介绍,他们是逐个代码分别处理的,使用“<site>.Url(‘/path’)”调用替换了这些连接。只要启用了特性标识,这将从根本上转化这些链接为 HTTPS。

Craver 强调,他们也非常重视避免丢失任何来自 Google 的流量,这是网站流量的重要来源,因而也是网站收入的主要来源。尽管 Google 所需的更改非常简单(将 301 跳转从 HTTP 更改为 HTTPS,并更新权威链接),团队也必须要慎重,以免犯错误。

迁移最后还会涉及 WebSocket,需要将所有事情转换为 WebSocket 加密,这也是为避免影响网站性能而在功能上的直接需要。据 Craver 介绍,他们可一次同时打开近五十万个并发的 websocket 连接。

该博文的内容很长,但是值得一读。

查看英文原文: Stack Overflow Becomes HTTPS by Default

2017-06-14 19:002421
用户头像

发布了 227 篇内容, 共 86.2 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

看门狗 | 分布式锁架构设计方案-02

九叔(高翔龙)

redis 分布式锁 Jedis RedLock

集成电路设计概括

老壳有点爽

芯片 集成电路 IC

最初芯片国产化是怎么来的?

老壳有点爽

芯片 集成电路 国产化 替代

芯片行业基本生态:设计生产封装的行业分工

老壳有点爽

芯片 集成电路 IC

商业计划书制作(2):商业计划书的完成阶段

老壳有点爽

创业 财富自由 商业计划书

世界集成电路发展概况

老壳有点爽

芯片 集成电路 IC 芯片营销

中国大陆芯片行业发展概况

老壳有点爽

芯片 集成电路 IC

Verilog 的debug技巧(1)

老壳有点爽

芯片 集成电路 IC Verilog 电路

Linux指令简述&vim引入(1)

老壳有点爽

vim Linux 脚本

MySQL DDL详情揭露

Simon

MySQL

Python 核心技术与实践 input&output

Bonaparte

魅力非凡的半导体电路行业

老壳有点爽

芯片 集成电路 IC 芯片营销

2020深圳站-GIAC全球互联网架构大会PPT分享

九叔(高翔龙)

架构 分布式系统 服务治理 大型网站演变 全链路压测

区块链之物流产业上链解决痛点

CECBC

区块链 供应链

物理实现(Physical Implementation)

老壳有点爽

芯片 集成电路 IC 物理设计 PI

成都信息工程大学的区块链工程成全国首个区块链工程本科专业

CECBC

区块链技术 区块链工程

模拟电路设计工程师发展九段

老壳有点爽

集成电路 IC 芯片设计 模拟电路

IC设计流程及工具

老壳有点爽

芯片 集成电路 IC IC设计流程及工具

看门狗 | 分布式锁架构设计方案-01

九叔(高翔龙)

redis 分布式锁 RedLock WatchDog

集成电路工艺基础介绍

老壳有点爽

芯片 集成电路 IC 工艺 制程

数字后端工程师发展六阶段

老壳有点爽

芯片 集成电路 IC 数字电路工程师

sed 语言学习技巧(2)

老壳有点爽

vim sed 脚本语言

Vim小技巧(2)

老壳有点爽

vim Linux 脚本语言

商业计划书制作(1):商业计划书的信息需求

老壳有点爽

创业 商业计划书 信息需求

强势入局,区块链专利将成为银行下一个战场?

CECBC

区块链 金融 银行

半导体行业个人理解

老壳有点爽

芯片 半导体 集成电路 IC

芯片行业的主要生意模式

老壳有点爽

芯片 集成电路 IC

sed语言学习技巧(1)

老壳有点爽

vim 编程语言 sed 脚本语言

MySQL备份与恢复场景示例

Simon

MySQL

PySpark RDD 基础运算和操作总结

是老郭啊

spark pyspark RDD

数字电路后端设计流程

老壳有点爽

设计 flow 集成电路 IC

StackOverflow转向默认使用HTTPS_DevOps & 平台工程_Andrew Morgan_InfoQ精选文章