HTTP基础之五(HTTP连接和性能优化)

被误解的HTTP连接头

HTTP允许客户端和服务器之间有很多代理的服务器存在,HTTP消息会被一次一次的转发最终到达服务器。有些情况下,两个相邻的HTTP应用之间,可能想要应用一些选项,只被当前的两个HTTP连接共享。这个HTTP Connection头的值是被逗号分隔的连接Token,例如Connection:colse,表示在发送了下一条消息以后就关闭连接。

Connection头包含3种不同类型的Token:HTTP头字段,随意定义的Token,close。任何保护在Connection头里面的值都要在转发消息前删除掉。

串行是事务延迟:简单来说就是页面加载时,如果是串行的,等到上一个图片加载完才能加载下一张,那么这个性能是很差的。

 

下面会介绍改进HTTP连接的方法:

并发连接

浏览器是可以非常简单的处理页面的内容,比如一次加载图片,加载完上一张,再下一张————this is too slow!!!

HTTP允许客户端开启多个HTTP连接并发执行请求,这样加载时间会重叠,提供性能。这个前提是单个的请求没有占满客户端的带宽,剩下的带宽可以给其它请求使用。

当然并不是并发请求就一定能提高性能,当单个请求占据很大的客户端路由器带宽,大量的请求就会争夺有限的带宽,这反而会导致性能降低。还有针对服务器大量的请求连接会消耗很多资源,导致服务器不能提供其它的服务,甚至宕机。实际中,浏览器确实会使用并发请求连接,但是会限制连接数(常常是4个),服务器会关闭超出的连接。

 

持久化连接

HTTP/1.1版本里面允许HTTP连接在使用以后保持连接状态,其它请求可以重用这个连接。

持久化VS并发:

并发连接有如下缺点:①每一个请求都会打开和关闭一个新的连接,消耗时间和带宽  ②每一个新连接由于慢启动的原因,性能不如已有的连接  ③最大连接数有限制

持久化的优势补充了并发的劣势。HTTP/1.0+和HTTP/1.1分别对应两种类型的持久化连接:keep-alive连接,persistent连接。关于这个两种连接,在下一篇文章详细整理。

 

管线连接(Pipelined)

HTTP/1.1允许通过持久化连接选择请求管线,这种方式相比keep-alive能够更加提升性能。多个请求可以在响应返回之前入队,使得在高延迟的网络环境中,大大减少了网络往返时间。有一些限制如下:

①HTTP客户端只有知道连接是持久化的才能使用管线  ②排队请求,响应也需要排队(按顺序),先请求先返回,由于HTTP消息没有进行编号,所以没法确定顺序。  ③HTTP客户端必须随时准备应对连接关闭,对未完成的请求进行再次发起。④针对POST这种请求还不能使用

 

三种连接(串行,持久化,管线)对比

可以看出管线请求性能最高,但是缺乏使用条件,目前使用的大多是keep-alive。

作者:张雪飞
出处:https://zhangxuefei.site/p/1048
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注