写点什么

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

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

关注

评论

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

周鸿祎瞄准中小微客户提供免费SaaS,思路:50万企业×2万年费=100亿补贴

B Impact

高效管理,让工作事半功倍

石云升

极客时间 2月月更 技术领导力实战笔记

Apipost如何自定义响应参数?

叶小柒

一次JSF上线问题引发的MsgPack深入理解,保证对你有收获

京东科技开发者

测试 序列化 msgpack 核心压缩

Apipost全局参数和目录参数怎么用?

不想敲代码

接口文档 apipost API调试

TDengine 荣获 2022 金猿奖“大数据产业最具投资价值企业”“大数据产业创新技术突破”

TDengine

数据库 tdengine 时序数据库

泼辣修图2023官方网页版入口在哪里?

茶色酒

泼辣修图2023

安全可信| 首批+先进!天翼全栈混合云一举斩获三项可信云评估

天翼云开发者社区

天翼云以10.2%份额位列中国公有云IaaS+PaaS市场第三

天翼云开发者社区

Flomesh Ingress 使用实践(二)TLS 进阶

Flomesh

HTTP ingress Pipy

共铸国云智领未来| 如心未来社区的“幸福密码”

天翼云开发者社区

应用可靠性与性能不给力?HarmonyOS HiViewDFX了解一下

HarmonyOS开发者

HarmonyOS

用Apipost进行gRPC调试教程

不想敲代码

微服务 gRPC 接口调试

面试官:什么是双亲委派模型?

王磊

java面试

Java高手速成 | JSP MVC模式项目案例

TiAmo

mvc java; jsp

时序电路建模基础

timerring

FPGA

用 NFTScan 的角度解析 Yuga labs NFT 项目系列

NFT Research

NFT BAYC

疫情时代的宠儿:抗生素行业,今后何去何从

前嗅大数据

大数据 数据分析 网络爬虫 抗生素

开发者变富攻略 | 如何使用开源工具,科学记账?

LigaAI

程序人生 敏捷开发 复式记账 企业号 2 月 PK 榜 Beancount

利用 Addax 异构迁移数据到 Databend

Databend

架构杂谈——互联网系统架构演进

小小怪下士

Java 程序员 后端 架构设计

「钞能力养成指北」前传:开年变富,开发者如何迈出第一步?

LigaAI

敏捷开发 新年计划 复式记账 图论 企业号 2 月 PK 榜

Spring Boot + WebSocket 实时监控异常

程序员大彬

Java springboot

AI时代的信息技术部怎么改革?

FN0

小程序 超级app

【FAQ】申请运动健康服务验证环节常见问题及解答

HarmonyOS SDK

HMS Core

跨境SaaS企业“会议营销"实战:立足商机注定平庸,300分客户转不转“MQL"?

B Impact

基于SLO告警(Part 2):为什么使用MWMB方法

Grafana 爱好者

可观测性 Grafana Prometheus SRE SLO

数字先锋| 枣庄政务云全新升级,居民办事体验upup!

天翼云开发者社区

如何理解DevOps?

老张

DevOps 软件工程

疫情大环境下科技互联网公司开源节流降本增效

laofo

研发效能 降本增效 开源节流

如何合并与拆分 Word 表格中的单元格

Geek_249eec

C# word VB.NET

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