http 持续连接

以下内容转载自:http://www.jianshu.com/p/0a47fc776314


http持久连接-keep alive和persistent

字数1230  阅读471  评论0 

基础概念

HTTP/1.1(以及HTTP/1.0的各种增强版本)允许HTTP设备在事务处理结束后仍将TCP 连接保持在打开状态,以便为未来的HTTP请求重用现存连接在事务处理结束后仍然保持在打开状态的TCP连接被称为持久连接。
非持久连接在每次事务处理结束后就会关闭。
重用TCP连接可以加速数据传输,因为:
1. 避免每次都经历缓慢的连接建立阶段,以及每次都执行关闭操作,节省耗时和带宽
2. 避免TCP连接慢启动特性的拥塞适应阶段

持久连接有两种类型:
1. 比较老的HTTP/1.0+ "keep-alive"连接
2. 现代的HTTP/1.1 "persistent"连接

使用场景

一个web页面中内嵌的图片通常都来自同一个Web站点,而且相当一部分的超链接都指向同一个站点。如果初始化了一个持久连接,我们就可以通过此连接发起更多目标服务器相同的请求。

HTTP/1.0+ keep-alive连接

HTTP/1.0+中支持的是keep-alive连接。

keep-alive握手过程
  1. HTTP/1.0+支持keep-alive连接,但默认并未激活。客户端通过发送一个包含Connection: Keep-Alive首部的请求来请求服务器激活keep-alive连接,即将这条连接保持在打开状态。
  2. 如果服务器愿意为下一条请求重用此连接,就会在响应中包含相同的首部。若没有,服务器就会在发回响应报文后关闭连接。客户端就是通过检测响应中是否包含Connection: Keep-Alive响应首部来判断服务器是否会在发送响应后关闭连接的
  3. 假如服务器同意使用keep-alive连接,那么接下来客户端必须在所有希望保持持久连接的请求中包含Connection: Keep-Alive首部。如果没有发送该首部,服务器会在那条请求后关闭连接。
  4. 那么何时关闭持久连接呢?注意,Connection: Keep-Alive首部只是请求将连接保持在活跃状态。即使服务器和客户端都同意建立持久连接了,它们仍可以在任意时刻关闭空闲的keep-alive连接,且可随意限制keep-alive连接所处理事务的数量。我们可以通过Keep-Alive选项调节它们的行为,具体请看下一部分。
Keep-Alive选项

用法:Keep-Alive: name[=value][, name=[value]]...
完全可选,但只有在包含了Connection: Keep-Alive首部的情况下才可使用它。

参数timeout:在Keep-Alive响应首部中发送,告诉客户端服务器估计会在打开状态保持到连接空闲多长时间后关闭连接。
参数max:在Keep-Alive响应首部中发送,告诉客户端服务器还会为另外几个http事务将连接保持在打开状态。
注意,这两个参数值仅仅是估计,并非承诺。

例如:

Connection: Keep-Alive
Keep-Alive: max=5, timeout=120

说明服务器最多还会为另外5个事务保持连接在打开状态,或者将打开状态保持到连接空闲了2两分钟后关闭。

persistent连接

HTTP/1.1逐渐停止了对keep-alive连接的支持,用persistent连接替代了它。

与keep-alive连接不同,HTTP/1.1中persistent连接默认就是激活的,除非特别指明,否则HTTP/1.1认为所有连接都是持久的。
HTTP/1.1的客户端假定在收到的响应后,除非报文包含了Connection: Close首部,否则客户端就认为连接仍为维持在打开状态。

如果客户端要建立一个非持久连接,则需要在请求中包含Connection: Close首部;服务器在处理完该事务后,就会在响应中包含Connection: Close首部以告知客户端连接已关闭。如果客户端不想在一条persistent连接上发送更多请求了,就应该在最后一条请求中包含Connection: Close首部。

只要服务器决定在事务处理结束后关闭连接,就必须在响应中包含Connection: Close首部。但不发送Connection: Close首部也并不意味着服务器承诺永远将连接保持在打开状态。

同样地,不管连接是否维持在打开状态,或Connection首部取了什么值,客户端和服务器仍然可以随时关闭空闲连接。

规则和限制

一个客户端对任何服务器或代理最多只能维护两条持久连接,以防服务器过载。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值