缘起
最近上线了一个新服务,有一个采集接口占用的带宽比较多,这个接口很简单,我有点好奇,一个https 请求会传输多少数据, 他会比HTTP请求多多少数据?
我写了一个demo在本地测试一下
|
|
然后在本地使用 caddy 提供https
|
|
最后用wireshark
抓包,我惊奇的发现。 一个简单的HTTPS 请求会传输2164 个 bytes 数据。
假设 并发为500QPS,那么这个接口所需要的带宽为:
2164×8×500/1000000 ≈ 8.656Mbps
HTTPS全称是:HTTP over TLS,每次建立新的TCP连接通常需要进行一次完整的TLS Handshake
。在握手过程中,客户端和服务器需要交换证书、公钥、加密算法等信息,这些数据占用了较多的字节数。
TLS Handshake的内容主要包括:
- 客户端和服务器的随机数
- 支持的加密算法和TLS版本信息
- 服务器的数字证书(包含公钥)
- 用于生成对称密钥的“Pre-Master Secret”
这个过程不仅耗时,还会消耗带宽和CPU资源。
因此想到最粗暴的解决方案也比较简单,就是直接使用 HTTP,省去TLS Handshake的过程,那么自然就不会有 TLS 的传输了。
那么是否真的有效呢?验证一下就知道。
相同的请求,http接口只需要 223 bytes
,大约只需要https
请求的 1/10。
结论
在绝大多数情况下,HTTPS 是首选,提供了更好的安全性和SEO,但是在一些内部网络或者高性能需求的受控环境,还有传输非敏感数据的时候,比如内网数据采集等,可以选择使用HTTP来优化性能。
当然,https 也可以优化 TLS Handshake
这个过程,那就是 Keep-Alive
。Keep-Alive
是一种连接复用机制,允许在一次 TCP 连接上进行多次请求-响应交互,而无需为每个请求都建立新的连接。它显著减少了 HTTPS 中的连接建立和关闭开销,提升性能。