50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

改革开放启示录(14/100)

hackstoic

创新管理

注册中心

邱学喆

Eureka 注册中心 原理图

大画 Spark :: 网络(4)-Endpoint注册使用与网络环境的构建

dclar

大数据 spark 源代码 框架原理

基于CC2530(ZigBee)设计的自动照明系统

DS小龙哥

2月月更 自动照明系统设计

前端培训:Vue3语法糖详解分享

@零度

Vue 前端开发

数字孪生的起源,从救宇航员回家开始

Meta 小元

数据可视化 智慧城市 数字孪生 元宇宙

“元认知”相关学习总结

panda

思维模型 阅读笔记 元认知

DDD实战(1):从需求到代码实现生鲜电商系统

深清秋

DDD 软件架构 生鲜电商系统

移动应用中的第三方SDK隐私合规检测,早知道

华为云开发者联盟

移动应用 安全 sdk 隐私 隐私合规

敏捷研发项目,我们该如何度量?

阿里云云效

阿里云 项目管理 云原生 度量 敏捷研发

看SparkSQL如何支撑企业级数仓

字节跳动数据平台

hive 字节跳动 Sparksql 数仓

敏捷开发中的「史诗」到底是什么?

LigaAI

项目管理 敏捷开发 史诗

阿里无影云桌面深度测评

乌龟哥哥

无影云电脑 2月月更

怎么说服领导,能让我用DDD架构肝项目?

小傅哥

DDD 小傅哥 技术架构 架构实践

java培训:JVM 内存布局

@零度

JVM JAVA开发

【C语言】二维数组

謓泽

C语言 2月月更 二维数组

2022年每个开发者必知的云原生趋势 | 社区征文

Geek_rze78a

容器 微服务 云原生 新春征文

51WORLD赋能数字孪生流域/工程建设,助力智慧水利创新发展

Meta 小元

可视化 数字孪生 智慧水利 元宇宙

多图|一文详解Nacos参数!

王磊

nacos

学生管理系统的架构设计

Fingal

#架构实战营

技术盘点:容器技术的演进路线是什么?未来有哪些想象空间?

阿里巴巴云原生

阿里云 容器 云原生

突然发现,npm里request依赖包已经弃用,怎么办?

华为云开发者联盟

npm HTTP node,js Request request依赖包

Linux系统问题排查

AiDaddy

Linux 负载 系统问题

深入理解持续测试:DevOps 流程中的重要一环

飞算JavaAI开发助手

KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了!

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

福昕鲲鹏加入,龙蜥社区迎来版式文档技术服务新伙伴

OpenAnolis小助手

Linux 开源 社区 福昕

大数据培训:构建Flink SQL流式计算平台

@零度

flink sql 大数据开发

vivo 服务端监控架构设计与实践

vivo互联网技术

服务端 系统监控 构架

15 行代码在 wangEditor v5 使用数学公式

CRMEB

了解一下ProtoBuf

蜜糖的代码注释

protobuf 2月月更

外屏和宽屏浪费了?HarmonyOS折叠屏设计规范教你用起来

HarmonyOS开发者

HarmonyOS

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