HTTPS对性能有哪些影响

本篇文章给大家分享的是有关HTTPS对性能有哪些影响,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

 HTTPS 对性能的影响

前言

HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗。
本文主要介绍 https 对用户体验的影响。

HTTPS 对访问速度的影响

在介绍速度优化策略之前,先来看下 HTTPS 对速度有什么影响。影响主要来自两方面:

  1. 协议交互所增加的网络 RTT(round trip time)。

  2. 加解密相关的计算耗时。

下面分别介绍一下。

网络耗时增加

由于 HTTP 和 HTTPS 都需要 DNS 解析,并且大部分情况下使用了 DNS 缓存,为了突出对比效果,忽略主域名的 DNS 解析时间。
用户使用 HTTP 协议访问 http://www.baidu.com(或者 www.baidu.com) 时会有如下网络上的交互耗时:

HTTPS对性能有哪些影响图 1 HTTP 首个请求的网络耗时

可见,用户只需要完成 TCP 三次握手建立 TCP 连接就能够直接发送 HTTP 请求获取应用层数据,此外在整个访问过程中也没有需要消耗计算资源的地方。
接下来看 HTTPS 的访问过程,相比 HTTP 要复杂很多,在部分场景下,使用 HTTPS 访问有可能增加 7 个 RTT。如下图:

HTTPS对性能有哪些影响

图 2 HTTPS 首次请求对访问速度的影响

HTTPS 首次请求需要的网络耗时解释如下:

  1. 三次握手建立 TCP 连接。耗时一个 RTT。

  2. 使用 HTTP 发起 GET 请求,服务端返回 302 跳转到https://www.baidu.com 。需要一个 RTT 以及 302 跳转延时。

    • 大部分情况下用户不会手动输入https://www.baidu.com 来访问 HTTPS,服务端只能返回 302 强制浏览器跳转到 https。

    • 浏览器处理 302 跳转也需要耗时。

  3. 三次握手重新建立 TCP 连接。耗时一个 RTT。

    • 302 跳转到 HTTPS 服务器之后,由于端口和服务器不同,需要重新完成三次握手,建立 TCP 连接。

  4. TLS 完全握手阶段一。耗时至少一个 RTT。

    • 这个阶段主要是完成加密套件的协商和证书的身份认证。

    • 服务端和浏览器会协商出相同的密钥交换算法、对称加密算法、内容一致性校验算法、证书签名算法、椭圆曲线(非 ECC 算法不需要)等。

    • 浏览器获取到证书后需要校验证书的有效性,比如是否过期,是否撤销。

  5. 解析 CA 站点的 DNS。耗时一个 RTT。

    • 浏览器获取到证书后,有可能需要发起 OCSP 或者 CRL 请求,查询证书状态。

    • 浏览器首先获取证书里的 CA 域名。

    • 如果没有命中缓存,浏览器需要解析 CA 域名的 DNS。

  6. 三次握手建立 CA 站点的 TCP 连接。耗时一个 RTT。

    • DNS 解析到 IP 后,需要完成三次握手建立 TCP 连接。

  7. 发起 OCSP 请求,获取响应。耗时一个 RTT。

  8. 完全握手阶段二,耗时一个 RTT 及计算时间。

    • 完全握手阶段二主要是密钥协商。

  9. 完全握手结束后,浏览器和服务器之间进行应用层(也就是 HTTP)数据传输。

当然不是每个请求都需要增加 7 个 RTT 才能完成 HTTPS 首次请求交互。大概只有不到 0.01% 的请求才有可能需要经历上述步骤,它们需要满足如下条件:

  1. 必须是首次请求。即建立 TCP 连接后发起的第一个请求,该连接上的后续请求都不需要再发生上述行为。

  2. 必须要发生完全握手,而正常情况下 80% 的请求能实现简化握手。

  3. 浏览器需要开启 OCSP 或者 CRL 功能。Chrome 默认关闭了 ocsp 功能,firefox 和 IE 都默认开启。

  4. 浏览器没有命中 OCSP 缓存。Ocsp 一般的更新周期是 7 天,firefox 的查询周期也是 7 天,也就说是 7 天中才会发生一次 ocsp 的查询。

    HTTPS对性能有哪些影响