写点什么

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

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

关注

评论

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

换个姿势,带着问题看Handler,android应用程序开发的流程

android 程序员 移动开发

插件化框架解读之Android-资源加载机制详解(二),kotlin语法印章类

android 程序员 移动开发

收好这份钉钉和抖音的客户端面经,真的很重要!,ndk开发环境

android 程序员 移动开发

教你如何使用Flutter和原生App混合开发(1),Android开发面试解答之Handler

android 程序员 移动开发

文字太多?控件太小?试试 TextView 的新特性 Autosizing 吧

android 程序员 移动开发

曾经身为一名Android面试官的我,如今去别的公司面试被虐成狗!我也有今天7

android 程序员 移动开发

最全-BAT-大厂Java和Android面试题整理!为接下来秋招金九银十做准备(聪明人已经收藏了

android 程序员 移动开发

最好用的安卓按钮,含泪狂刷Android基础面试118题

android 程序员 移动开发

插件化&热修复系列——ClassLoader方案设计,开源至上

android 程序员 移动开发

数据结构篇09、哈希表--简化版HashMap,一线互联网移动架构师360°全方面性能调优

android 程序员 移动开发

文档06-H264解码流程,android实战开发项目阅读器

android 程序员 移动开发

无意苦争春,一任群芳妒!看完这份2020年度大厂Android面试总结

android 程序员 移动开发

揭秘 Android 百万开发被迫转行背后的残酷真相,只是你没找对方向罢了

android 程序员 移动开发

搞Android开发为什么这么难?想哭了!,kotlin中文

android 程序员 移动开发

收割腾讯等十几个Offer后,揭秘进大厂的秘诀和Android技术面试题汇总!

android 程序员 移动开发

教你如何使用Jetpack绘制天气图,史上最详细!,跨平台app开发框架

android 程序员 移动开发

搞了三年Android开发终于把线程、多线程和线程池全搞懂了,掌握这些核心知识(1)

android 程序员 移动开发

教你如何使用Flutter和原生App混合开发,androidstudio项目实战

android 程序员 移动开发

数据结构(三), 弄懂红黑树RBTree(多图警告!!!),帮你突破瓶颈

android 程序员 移动开发

春招结束,腾讯+字节,android移动开发基础案例教程答案

android 程序员 移动开发

最后再说一次!!不要在你的App启动界面设置SingleTask-SingleInstance

android 程序员 移动开发

插件化库VirtualAPK详解,你头秃都没想到还能这样吧

android 程序员 移动开发

插件化框架解读之Class文件与Dex文件的结构(一),Android详解

android 程序员 移动开发

最新 Android 热门开源项目公布,androidframework开发书籍

android 程序员 移动开发

插件化框架解读之android系统服务实现原理(五),毕业工作5年被裁

android 程序员 移动开发

搞了三年Android开发终于把线程、多线程和线程池全搞懂了,掌握这些核心知识

android 程序员 移动开发

数据结构篇11、映射Map及其三种底层实现,android插件化框架

android 程序员 移动开发

普通程序员,三年成为年薪70w架构师,只因有了这些习惯

android 程序员 移动开发

拿来吧你,Compose尝鲜初体验!,Android开发真等于废人

android 程序员 移动开发

掌握Android和Java线程原理上,跨平台移动开发工具

android 程序员 移动开发

新鲜出炉的Android面试题,确定不来看看吗?还有超详细的答案解析哦

android 程序员 移动开发

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