首页 » InfoTech »

HTTP的Keep-Alive

2018年6月17日 / 26次阅读
TCPIP

在http早期,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。

使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。

但是,keep-alive并不是免费的午餐,长时间的tcp连接容易导致系统资源无效占用。配置不当的keep-alive,有时比重复利用连接带来的损失还更大。所以,正确地设置keep-alive timeout时间非常重要。

Httpd守护进程,一般都提供了keep-alive timeout时间设置参数。比如nginx的keepalive_timeout,和Apache的KeepAliveTimeout。这个keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住keepalive_timeout秒后,才开始关闭这个连接。

当httpd守护进程发送完一个响应后,理应马上主动关闭相应的tcp连接,设置 keepalive_timeout后,httpd守护进程会想说:”再等等吧,看看浏览器还有没有请求过来”,这一等,便是keepalive_timeout时间。如果守护进程在这个等待的时间里,一直没有收到浏览发过来http请求,则关闭这个http连接。

最后放一张简单明了的图:

HTTP的Keep-Alive

HTTP的Keep-Alive

 

查看服务器的Keep-Alive配置,可以试试这个方法:

>>> import requests as rq
>>> r = rq.get('http://www.maixj.net')
>>> r.headers
{'Date': 'Sun, 17 Jun 2018 03:39:12 GMT', 'Server': 'Apache/2.4.25 (Unix) PHP/7.
0.16', 'Last-Modified': 'Sat, 16 Jun 2018 09:18:42 GMT', 'Accept-Ranges': 'bytes
', 'Content-Length': '10717', 'Cache-Control': 'max-age=3, must-revalidate', 'Ex
pires': 'Sun, 17 Jun 2018 03:39:15 GMT', 'Vary': 'Accept-Encoding,Cookie', 'Keep
-Alive': 'timeout=5, max=100', 'Connection': 'Keep-Alive', 'Content-Type': 'text
/html; charset=UTF-8', 'Content-Encoding': 'gzip'}
>>>

timeout = 5,表示超时时间是5秒;

max=100,表示在超时前又有新的请求过来时减1,一直减到0时,强制断开TCP连接。

本文链接:http://www.maixj.net/ict/http-keep-alive-18199
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

《HTTP的Keep-Alive》有2条评论

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.

  • 麦新杰

    KEEPALIVE配置所在位置:.....apache/conf/extra/httpd-default.conf [ ]

  • 麦新杰

    APACHE 2.4 KEEPALIVE默认是On [ ]


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top