写点什么

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

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

关注

评论

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

你以为的推荐系统,其实只是推荐模型

OneFlow

机器学习 推荐系统 推荐模型

一套优秀的直播系统源码是什么样的?起码要有这五个模块

开源直播系统源码

软件开发 直播系统 直播系统源码 钠斯直播系统

基于keil5新建STM32F10x寄存器版本工程

DS小龙哥

8月月更

一文搞懂EMAS Serverless小程序开发|电子书免费下载

hum建应用专家

Serverless emas

基于RPC接口的业务侧流量回放

转转技术团队

测试工具 流量回放 测试方案

数据中台逼近炒作顶峰之际,Gartner给想建数据中台的一些建议

雨果

数据中台 Gartner

数字知识库-知识图谱管理系统

金陵老街

Java 数字化 知识图谱 企事业系统

前端监控系列3 | 如何衡量一个站点的性能好坏

字节跳动终端技术

字节跳动 前端 性能监控 火山引擎 站点性能

为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?

TimeFriends

8月月更

云原生(二十一) | Kubernetes篇之深入了解Ingress

Lansonli

云原生 8月月更

​DTSE Tech Talk丨第3期:解密数据隔离方案,让SaaS应用开发更轻松

华为云开发者联盟

SaaS 企业 华为云

使用 Presto 和 Alluxio 在 AWS 上搭建高性能平台来支持实时游戏服务

Alluxio

游戏 AWS presto Alluxio 8月月更

高效完成需求计划的四个关键 | 敏捷开发

LigaAI

Scrum 敏捷开发 Sprint LigaAI spring event

深度解读 | 关于SBOM最基础元素,你需要知道的(Part II)

安势信息

#开源 #SBOM 软件供应链安全 SBOM最基础元素 开源安全与治理

阿里云携手卫宁健康发布WinCloud智慧医疗云联合解决方案,打造新一代智慧医疗系统

阿里云弹性计算

云服务器 分布式云 云盒 本地化部署

那些你不知道的 CSS 自定义形状网格布局

南城FE

CSS 前端 布局

从 Angular Component 和 Directive 的实例化,谈谈 Angular forRoot 方法的命令由来

汪子熙

typescript 前端开发 angular web开发 8月月更

什么是企业知识库?有什么作用?如何搭建?@附源码

金陵老街

Java、 企业数字化转型 spring-boot

压力测试-JMeter常用插件、服务器硬件监控

程序知音

Java 程序员 后端 后端技术

手摸手告诉 UI 妹子数据可视化 20 条优化细则【切图仔直接收藏】

掘金安东尼

前端 UI 8月月更

【LeetCode】爱吃香蕉的珂珂Java题解

Albert

LeetCode 8月月更

如何快速开发一个健康助手,实时守护用户健康

HarmonyOS SDK

博睿数据入选《2022爱分析· 银行数字化厂商全景报告》

博睿数据

银行 智能运维 博睿数据

打了15天,如何做到在容器权限上不失一分?

青藤云安全

容器安全 攻防演练

Spring进阶(五):Spring事务管理(详解+实例)

No Silver Bullet

spring 事务管理 8月月更

开源一夏 | 在 STM32L051 上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

修筑产学研用一体化的通衢,从一场比赛背后瞭望苏州园区人才培养新范式

脑极体

《键值型数据库系统技术及节能要求》团体标准发布,腾讯、京东、北邮等联合发起

科技热闻

四个层次管好设备,为生产保驾护航

PreMaint

预测性维护 设备管理 设备预测性维护

快速搞懂Mysql中BufferPool底层原理

知识浅谈

Buffer Pool 8月月更

龙蜥开发者说:我眼里的龙蜥社区:一个包容的大家庭 | 第 10 期

OpenAnolis小助手

Linux 开源 操作系统 龙蜥开发者说 参与贡献

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