HTTP keep-alive和TCP keepalive

本文探讨了HTTP 1.0/1.1中的Keep-alive机制,它如何提高HTTP请求效率,并与TCP keepalive进行比较。重点讲述了两者的工作原理、服务器端的超时策略及客户端行为。同时,讨论了实际应用中可能遇到的差异,如浏览器行为和不同服务器的实现情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP keep-alive

传统的HTTP/1.0应用里都是一次TCP连接一次request,这样子效率低并且造成服务器负载增加。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive,而HTTP/1.1默认是支持长连接的。如果HTTP/1.1版本的http请求报文不希望使用长连接,则要在请求头中加上Connection: close,接收到这个请求头的对端服务就会主动关闭连接。

但是http长连接会一直保持吗?肯定是不会的,不然会造成服务端端口被长期占用释放不了。一般服务端都会设置keep-alive超时时间。超过指定的时间间隔,服务端就会主动关闭连接。同时服务端还会设置一个参数叫最大请求数,只要超过了最大请求次数,即使还没到超时时间,服务端也会主动关闭连接。

当然了,协议是这样规定的,至于支不支持还得看服务器(比如tomcat)和客户端(比如浏览器)的具体实现。在实践过程中发现谷歌浏览器使用HTTP/1.1协议时请求头中总会带上Connection: keep-alive,另外通过httpclient使用HTTP/1.0协议去请求tomcat时,即使带上Connection: keep-alive请求头也保持不了长连接。

HTTP keep-alive和TCP keepalive的区别

TCP keepalive指的是TCP保活计时器(keepalive timer)。设想有这样的情况:客户已主动与服务器建立了TCP连接。但后来**客户端的主机突然出故障。**显然,服务器以后就不能再收到客户发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75秒发送一次。若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。

针对linux系统,TCP保活超时时间、探测报文段发送间隔、探测报文段最大发送次数都是可以设置的,如下

# cat /proc/sys/net/ipv4/tcp_keepalive_time  7200 当keepalive启用的时候,TCP发送keepalive消息的频度。缺省是2小时
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl  75  当探测没有确认时,重新发送探测的频度。缺省是75# cat /proc/sys/net/ipv4/tcp_keepalive_probes  9  探测尝试的次数。如果第1次探测包就收到响应了,则后8次的不再发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值