论坛首页 综合技术论坛

HTTP管线化和持久化连接

浏览 5691 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-29  

原文出处 http://www.sanotes.net/html/y2008/205.html

 

来自Laurence:浏览器pipeline

 

IE, Firefox, Safari ship浏览器默认状态下并不激活http管线化的功能;Opera是据作者所知唯一默认状态下激活http管线化的浏览器.不采用管道化意味着每次请求必须被应答之后,它的连接才能空闲以便发送下一次请求.这样会导致平均每个连接带来额外的延迟.或者如果你的服务器不支持http长连接,进行其他的tcp三次握手增加了额外的请求往返,双倍延迟.

来自wikipedia:HTTP Pipeline

 

http管线化是一项实现了多个http请求不需要等待相应的应答就能够写进同一个socket的技术.仅有http1.1规范支持http管线化,1.0并不支持.

采用管线化的请求会对页面载入时间产生动态的提高.尤其是当通过高延迟的网络,例如通过卫星网络连接.

即使通常情况下,可以通过同一个tcp数据包发送多个http请求,http管线化向网络上发送更少的tcp数据包,以便减轻网络负载.

 

只有幂等的请求能够被管线化,例如get和head请求.post请求不应该被管线化.新建立连接上的请求因为无法判断源服务器(代理服务器)是否支持http1.1协议,也不应该被管线化处理.所以,仅在重用已经成功建立的持久化连接的情况下,才可以使用管线化.

 

http管线化需要客户端和服务器双方都能够支持.http1.1规定服务器必须支持管线化.但并未提及服务器必须管线化响应信息,但是如果一旦客户端选择管线化的通信方式,服务器必须能够支持和受理.

来自wikepedia:HTTP Persistence Connection

http持久化连接也称http长连接或者http连接复用,思想是使用同一个tcp连接去发送和接收多个http请求/响应,以便避免为每次单独的请求/应答建立新的连接.

 

优势

减少cpu和内存占用(因为同一时间,启用更少的连接)

减轻网络堵塞(建立更少的连接)

减轻后续请求的延迟(因为避免建立新连接而减频繁的握手)

不需要牺牲当前的tcp连接, 就能够报告错误.

根据RFC 2616 (page 47),一个单用户客户端对于任何一台服务器或者代理服务器都可以维护不多于两个的连接数.

在由当前由n台服务器组成的网络中, 任意一台代理服务器对另外的服务器或者代理服务器应该维护2*n个连接.

这些指南目的在于提升http响应性能,避免网络堵塞.

Reference:
http://www.mozilla.org/projects/netlib/http/pipelining-faq.html
http://en.wikipedia.org/wiki/HTTP_pipelining
http://en.wikipedia.org/wiki/HTTP_persistent_connection

   发表时间:2009-02-11  
据说新的servlet标准已经支持http长连接了。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics