TLS 握手的成本与会话恢复

首次建连的加密握手要额外往返,跨国访问时这部分可能占首字节时间的一大半。会话恢复和 0-RTT 是用来削掉它的。

6 分钟协议与压缩
TLS 握手的成本与会话恢复

要点

TLS 1.3 把握手压到一个往返,会话恢复能进一步做到 0-RTT。CDN 的价值之一就是把握手终止在离用户最近的节点上。

本文目录
  1. 01首字节时间花在哪
  2. 02CDN 为什么能削掉这部分
  3. 030-RTT 的注意事项

首字节时间花在哪

一次 HTTPS 请求在拿到第一个字节之前,至少要完成:DNS 解析、TCP 握手、TLS 握手,然后才发出实际请求。每一步都是至少一个往返。

阶段TLS 1.2TLS 1.3说明
TCP 握手1 往返1 往返QUIC 下与加密握手合并
TLS 握手(首次)2 往返1 往返TLS 1.3 的主要改进
TLS 握手(恢复)1 往返0 往返需要会话票据

往返时间由物理距离决定。用户在南美、源站在东亚时,单次往返可能是两三百毫秒——三个往返就接近一秒,全部发生在传输任何有用数据之前。

CDN 为什么能削掉这部分

CDN 把 TLS 握手终止在边缘节点。用户与几十毫秒外的节点完成握手,节点与源站之间则复用已建立的长连接——那几个昂贵的往返被换成了短距离往返。

这也是「CDN 对动态内容也有用」的原因

很多人以为 CDN 只对可缓存的静态资源有价值。实际上即使每个请求都要回源,握手终止和长连接复用本身就能显著改善首字节时间——这部分收益与命中率无关。

0-RTT 的注意事项

0-RTT 允许客户端在握手完成前就发送数据,代价是这部分数据可能被重放攻击利用。规范要求只对幂等请求使用。

  • 开启 0-RTT 前确认厂商是否限制只用于 GET/HEAD;
  • 不要让 0-RTT 阶段的请求触发写操作;
  • 会话票据有有效期,长时间未访问的用户仍走完整握手;
  • 用实测工具看首字节时间的分布,而不只看平均值——握手成本主要体现在冷连接的长尾上。

在你的网站验证

边缘核验从多地实测首字节时间与握手耗时