写点什么

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:002376
用户头像

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

关注

评论

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

fil挖矿怎么样?fil挖矿收益怎样?

fil挖矿怎么样 fil挖矿收益怎样

如何在二三线城市月薪过万(二)面试100人后的经验总结!教你如何做面霸

小鲍侃java

8月日更

区块链和比特币到底有什么关系?

CECBC

Linux从头学:所有编程语言中的栈操作,底层原理都在这里

Java 编程 架构 面试 架构师

fil最新消息!Fil价值与未来如何?

区块链 分布式存储 IPFS fil FIL价值

七夕特别篇|用Python绘画牛郎织女在鹊桥相见

Python研究者

8月日更

Vue进阶(三十四): webstorm 应用 git 进行版本管理

No Silver Bullet

git Vue 8月日更

到底啥是区块链分叉?

CECBC

区块链技术 | 数字货币的未来发展前景趋势分析

CECBC

阿里P8亲传Java面试指南,助我一路过关斩将,成功拿到大厂Offer

Java 编程 面试 程序人生 架构师

震惊!300多页美团百亿级系统架构设计实录首公开

Java 编程 架构 面试 架构师

“硬钢字节”阿里大牛分享内部数据结构与算法(诛仙版)源码笔记

Java~~~

Java 架构 面试 算法 数据结构与算法

GitHub不再支持密码验证解决方案:SSH免密与Token登录配置

zhoulujun

git GitHub SSH Token 免密登录

看完这篇博客,Python Django 你就学会一半了

梦想橡皮擦

8月日更

【LeetCode】股票的最大利润Java题解

Albert

算法 LeetCode 8月日更

我为什么不建议大家等公司倒闭之后,再找工作!

非著名程序员

面试 认知提升 招聘管理 8月日更

Python代码阅读(第9篇):返回最长的输入对象

Felix

Python 编程 Code Programing 阅读代码

minetest Window编译运行

c++ 开源 游戏 我的世界

毕业总结

Johnny

架构实战营

Java的四种引用类型

W🌥

Java JVM 8月日更

新药研发周期越来越短,北鲲云超算平台如何提高药企竞争力?

北鲲云

上游思维:上工治未病

石云升

读书笔记 公司管理 8月日更 上游思维

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

Java 程序员 架构 面试 IT

细说JavaScript正则表达式(RegExp)

devpoint

正则表达式 regex JavaScrip 8月日更

求天理 存人欲|靠谱点评

无量靠谱

提升个人影响力的简单原则

俞凡

认知

fil矿机价格怎么计算?fil矿机托管费用怎么计算?

fil矿机价格怎么计算 fil矿机托管费用怎么计算

【前端 · 面试 】HTTP 总结(十二)—— URL 和 URI

编程三昧

面试 HTTP url 8月日更

DAPP钱包开发模式详细介绍

Geek_23f0c3

dapp 钱包系统开发 DAPP智能合约交易系统开发

一切努力似乎都徒劳?|靠谱点评

无量靠谱

JavaScript继承的实现方式:原型语言对象继承对象原理剖析

zhoulujun

JavaScript

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