GET
请求,没有携带什么大数据量,那为啥上行带宽会被瞬间塞满呢?🤔初步排查:哪里消耗了带宽?
Charles
抓包一看,果然“真凶”现身了:一个小小的请求,居然需要 1.68 KB 的流量,其中仅 TLS 握手(Handshake)就占了 1.27 KB。这玩意儿可是个不小的“流量杀手”啊!感觉就像吃个外卖结果送餐费比餐费还高,心里有点小崩溃。TLS Handshake是什么来头?
一个带宽的简单计算
可是,直接用 HTTP 安全性不是问题吗?
如果非要用 HTTPS,有没有降低带宽占用的方案?
减少连接重建:可以用 HTTP/2 或者 HTTP Keep-Alive 来减少握手频率,让连接复用,不必每次请求都重新握手。代码如下: import requests
session = requests.Session()
session.keep_alive = True # 开启 Keep-Alive
response = session.get("https://example.com")这样复用连接之后,后续的请求会减少握手过程,带宽也能省不少。 启用 TLS Session Resumption:在服务器端配置 TLS 会话恢复(Session Resumption),这样客户端在短时间内的重复访问可以复用以前的会话信息,从而避免重新握手。比如 Nginx 配置里可以加上: ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;这样可以存储会话信息,复用后续请求的 TLS 连接,减少握手的带宽开销。 压缩 HTTPS 请求:虽然 TLS 本身已经有压缩算法,但在数据较大的情况下,还是可以进一步用 GZIP 压缩来优化传输。常见的 Web 服务器如 Apache、Nginx 都支持设置 GZIP,比如在 Nginx 中可以开启 GZIP: gzip on;
gzip_types text/plain application/json;配置完压缩后,传输的数据包大小可以进一步减少,带宽占用也就小一些。
对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。