持久连接,Alive模式的HTTP请求的结束的实现代码

HTTP Keep-Alive模式

2015/12/01 · HTML5 · 持久连接,Alive模式的HTTP请求的结束的实现代码。1
评论 ·
HTTP

初稿出处:
吴秦   

有趣的事发生在二月份的一次面试经历中,本来小编不想说出去丢人显眼,可是为了警醒自身和规劝子孙,作者决定写成博文发出来。因为在面试进度中,作者讲在2008年写过QQ农场帮手,在那之间深远学习了HTTP协议,而且在2009-05-18写了博文:HTTP协议及其POST与GET操作差异&
C#中怎么着利用POST、GET等。面试官说既然作者纯熟HTTP协议,就问“当HTTP选取keepalive格局,当客户端向服务器发生请求之后,客户端怎样判定服务器的数量已经产生达成?”

说实话,当时自小编懵了,一贯没有关怀过keepalive格局。小编只晓得:HTTP协议中型地铁户端发送1个小请求,服务器响应以所期待的新闻(例如贰个html文件或一副gif图像)。服务器日常在发送回所请求的多寡未来就倒闭连接。那样客户端读数据时会再次来到EOF(-1),就清楚多少已经接收完全了。自笔者就这么被面试官判了极刑!!!说小编完全停留在外部,没有深入(当时的确很受打击,平素自以为技术尚可!)。作者当即真正很想找种种借口:

  • 事先并未利用HTTP的keepalive方式,所以并未尖锐
  • 久而久之没有用HTTP协议,细节忘了
  • 见习的东西跟HTTP协议没有提到,用得少了就忘了
  • 。。。。。。

以为各样解释都以那么苍白无力!笔者再也惊叹书到用时方恨少,也感慨非凡1位的光阴是多么的个别(曾一度想成为3个IT专业全才),根本未曾活力弹无虚发,而且当没有真的使用3个事物的时候,往往会忽视掉很多细节。朋友假使您也答不上去,请认真审视下文,不要怀着浮躁了的心,说不定下次就有人问您这么些标题。

故而基于EOF就可看清二回呼吁的竣事,上边的代码(PHP)很常见:

http1.1本子在此之前 许多浏览器和服务器增加了持久连接

Keep-Alive 是什么?

1、什么是Keep-Alive模式?

小编们通晓HTTP协议利用“请求-应答”情势,当使用普通情势,即非KeepAlive情势时,各种请求/应答客户和服务器都要新建三个连连,完毕以往马上断开连接(HTTP协议为无连接的说道);当使用Keep-Alive形式(又称持久连接、连接重用)时,Keep-Alive作用使客户端到服务器端的接连持续有效,当出现对服务器的后继请求时,Keep-Alive效能幸免了树立可能再度建立连接。

图片 1

http 1.0中暗中认可是关门的,须求在http头加入”Connection:
Keep-Alive”,才能启用Keep-Alive;http
1.第11中学暗中同意启用Keep-Alive,借使进入”Connection: close
“,才关闭。近日大部分浏览器都是用http1.1协议,相当于说暗许都会倡导Keep-Alive的接连请求了,所以是不是能不辱职务贰个总体的Keep-Alive连接就看服务器设置情况。

复制代码 代码如下:

运用 Connection:Keep-Alive 的首部来操作 tcp 的恒久连接

概观

暗许意况下,HTTP链接日常在呼吁完结未来关闭。这意味服务端在达成响应的交付之后便关门大吉了TCP链接。为了让链接保持开拓,来满意多请求,可以行使keep-alive
头信息。

2、启用Keep-Alive的优点

从下边包车型客车辨析来看,启用Keep-Alive情势必然更火速,质量更高。因为制止了树立/释放连接的耗费。下边是RFC
2616上的总计:

    1. By opening and closing fewer TCP connections, CPU time is saved
      in routers and hosts (clients, servers, proxies, gateways,
      tunnels, or caches), and memory used for TCP protocol control
      blocks can be saved in hosts.
    2. HTTP requests and responses can be pipelined on a connection.
      Pipelining allows a client to make multiple requests without
      waiting for each response, allowing a single TCP connection to
      be used much more efficiently, with much lower elapsed time.
    3. Network congestion is reduced by reducing the number of packets
      caused by TCP opens, and by allowing TCP sufficient time to
      determine the congestion state of the network.
    4. Latency on subsequent requests is reduced since there is no time
      spent in TCP’s connection opening handshake.
    5. HTTP can evolve more gracefully, since errors can be reported
      without the penalty of closing the TCP connection. Clients
      using     future versions of HTTP might optimistically try a new
      feature, but if communicating with an older server, retry with
      old   semantics after an error is reported.

RFC
2616(P47)还提议:单用户客户端与其余服务器或代办之间的连接数不该超越一个。1个代理与其余服务器或代码之间应该使用抢先2
*
N的外向并发连接。那是为着增强HTTP响应时间,幸免拥挤堵塞(冗余的一而再并无法代码执行品质的晋级)。

// $fp是由fsockopen()发生的句柄
while(!feof($fp)) {
echo fgets($fp);
}

兑现HTTP/1.0 keep-alive连接的客户端可以透过包括Connection:
Keep-Alive首部请求将一条连接保持在开辟状态。假诺服务器愿意为下一条请求将连接保持在开拓状态,就在响应中富含相同的首部(参见图4-14)。要是响应中从未Connection:
Keep-阿里ve首部,客户端就认为服务器不援助keep-alive,会在发回响应报文之后关闭连接。

并未Keep-Alive的情状下,HTTP是怎么工作的

  • 1.客户端需求再次创制一个链接和服务器交互,用以吸纳多个文书。
  • 2.客户端使用八个新的链接来向服务器请求HTML文件,这么些一而再在吸收完文件的时候就会被关闭。
  • 3.浏览器解析HTML文件并检查形成网页的显得是不是还索要此外文件。(例如css文件,js文件,图片)
  • 4.经过到底的剖析,浏览器再另行创建链接来呼吁那每2个文件。

相关文章