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个