HTTP 与 HTTPS 有什么区别?keep-alive 与连接池是什么关系?

结论先行:HTTPS = HTTP + TLS:在 TCP 之上多一层 TLS 握手协商会话密钥,对传输内容加密,并通过证书链校验服务器身份、防止篡改;代价是多出 1~2 个 RTT 的握手开销,实践中靠会话复用与长连接缓解。keep-alive 是 HTTP 层面的连接复用机制(HTTP/1.1 默认开启),让一条 TCP 连接连续承载多个请求;连接池是客户端侧对长连接的池化管理,两者配合可避免频繁三次握手。

HTTP 与 HTTPS 对比表

维度HTTPHTTPS
默认端口80443
传输明文TLS 加密
身份校验证书链验证服务器身份
完整性消息认证,防篡改
握手成本TCP 三次握手TCP + TLS 额外 1~2 个 RTT

keep-alive 与连接池的关系

  • keep-alive:协议机制,告知对端“这条连接可以复用”,避免每个请求都重建 TCP;
  • 连接池:客户端组件(Apache HttpClient、OkHttp 等)把空闲连接缓存复用,按 maxTotal/maxPerRoute/空闲保活时间管理;
  • 常见问题:未开启复用或池过小 → 高并发下反复建连 → TIME_WAIT 堆积、建连成为瓶颈。
// HttpClient 连接池配置示意
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);                  // 连接池总上限
cm.setDefaultMaxPerRoute(50);         // 单个目标路由上限
CloseableHttpClient client = HttpClients.custom()
        .setConnectionManager(cm)
        .setKeepAliveStrategy((resp, ctx) -> 30_000) // 空闲保活 30 秒
        .build();

常见追问 / 记忆点

  • 追问:为什么短连接一多 TIME_WAIT 就堆积?答:主动关闭方要等 2MSL 才释放;建连快、关闭慢,量大时端口与内存被占满。
  • 追问:HTTPS 一定比 HTTP 慢吗?答:多 1~2 个 RTT,但配合连接复用与 TLS1.3 差距很小,加解密开销多数场景可忽略。
  • 记忆点:HTTPS 多一层 TLS;keep-alive 管“连接别断”,连接池管“复用别爆”。
笔记加载中…