Connection management

HTTP/1.x中的连接管理

  • short-lived connections
  • persistent connections
  • HTTP pipelining

注意:HTTP的连接管理是

  • hop by hop 逐跳的 不是
  • end to end 端到端

HTTP/1.0

short-lived connections

每个请求都是在自己的连接上完成的,请求之前会握手,这些握手是 序列化的?

缺点:

  • 建立新连接所需时间长

HTTP/1.1

persistent connections / keep-alive connection

持久连接是一种在一段时间内保持打开状态的连接,可以重复用于多个请求,从而节省了新的 TCP 握手的需要,并利用了 TCP 的性能增强功能。

缺点:即使在空闲时也会消耗服务器资源,在重负载时也可以进行DoS攻击

HTTP pipelining

管道化是通过同一持久连接发送连续请求而不等待答案的过程。

只有幂等方法,即 GET 、 HEAD 、 PUT 和 DELETE ,可以被管道化

Domain sharding

域名分片 因为HTTP是序列化请求,所以即使没有顺序也不是最优的方案

解决方案:

  • 打开多个请求连接
  • 默认的每个域名连接是2-3个,后面是6个