提高HTTP的连接性能

前言

如果只对连接进行简单的管理,TCP的性能时延可能会叠加起来。这就是串行事务处理。下面讨论了四种提高HTTP连接性能的方法。

四种方法

  1. 并行连接:通过多条TCP连接发起并发的HTTP请求。
  2. 持久连接:重用TCP连接,消除连接及关闭时延。
  3. 管道化连接:通过共享的TCP连接发起并发的HTTP请求。
  4. 复用的连接:交替传送请求和响应报文(试验阶段)。

并行连接

优点:HTTP允许客户端打开多条连接,并行地执行多个HTTP事务。每个事务都有自己的TCP连接(可以同时多台服务器建立并行的连接)。这样可以将时延重叠起来,而且如果单条连接没有充分利用客户端的因特网带宽,可以将未用的带宽分配来装载其他对象。

缺点:在网络带宽不足的情况下,如果并行加载多个对象,每个对象都会去竞争有限的带宽,这样带来的性能提升很小。打开大量的连接会消耗很多内存资源,从而引发自身的性能问题。太多的连接会造成服务器性能严重下降,对高负荷的代理来说也同样如此。实际上,浏览器确实使用了并行连接,但总数限制为一个较小的值(通常为4个)。

持久连接

并行连接可以提高复合页面的传输速度。但并行连接也有一些缺点:

  • 每个事务都会打开/关闭一条新的连接,会耗费时间和带宽。
  • TCP慢启动的特征,每条新连接的性能都会有所降低。
  • 可打开的并行连接数量实际上是有限的。

重用已对目标服务器打开的空闲持久连接,就可以避开缓慢的连接建立阶段。而且,还可以避免慢启动的拥塞适应阶段。

  1. Keep-Alive
    实现HTTP/1.0 keep-alive连接的客户端可以通过包含Connection:Keep-Alive首部请求将一条连接保持在打开状态。如果服务器原因为下一条请求连接保持打开状态,就会在响应中包含相同的首部。
    Keep-alive已经不再使用了,当前的HTTP/1.1规范中也没有对它的说明。但浏览器和服务器对keep-alive握手的使用仍然相当广泛。Keep-Alive首部完全是可选的,只有在提供了Connection:Keep-Alive时才能使用它。

  2. HTTP/1.1持久连接
    HTTP/1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接(persistent connection)的改进型设计取代了它。持久连接的目的和keep-alive连接的目的相同,但工作机制更优一些。
    HTTP/1.1持久连接在默认情况下是激活的。除非特别说明,否则HTTP/1.1假定所有的连接都是持久的,除非显式添加一个Connection:close首部。在以前的版本中,keep-alive连接要么是可选的,要么根本不支持,而HTTP/1.1连接则维持打开状态,但是,客户端和服务器仍然可以随时关闭空间的连接。

管道化连接

HTTP/1.1允许在持久连接上可选地使用请求管道。在响应到达之前,可以将多条请求放入队列。当第一条请求到达服务器时,第二条,第三条请求也可以开始发送了。在高时延网络条件下,这样做可以降低网络的环回时间,提高性能。

对管道化的几条限制:

  • 如果HTTP客户端无法确认连接是持久的,就不应该使用管道。
  • 必须按照与请求相同的顺序回送HTTP响应。
  • HTTP客户端必须做好连接会被任意时刻关闭的准备,还要准备好连接被关闭时,重新发送未发送完的请求。
  • HTTP客户端不应该用管道化的方式发送会产生副作用的请求(比如POS请求)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值