TCP keepalive和HTTP keepalive区别
TCP 的 Keepalive
在传输层
是内核态实现的,是TCP的保活机制
当两端的TCP连接一直没有数据交互,就达到了触发TCP保活机制的条件,那么内核里的TCP协议栈就会发送探测报文。
如果对端程序是正常工作的,当TCP保活的探测报文发送到对端时,对端就会发出相应,这样TCP的保活时间就会被重置,等待下一个TCP保活时间的到来。
如果对端主机宕机或者其他原因探测报文不可到达,TCP探测报文没有应答,连续发送几次,到达保活次数后,TCP会报告该TCP连接已经死亡。
HTTP的keepalive
在应用层
是由用户态实现的,成为HTTP的长链接。
HTTP长链接是指使用同一个TCP连接,来发送和接受多个HTTP请求和响应,避免了多次重复建立和释放连接的开销。
HTTP 长连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
HTTP 1.0 中默认是关闭的,从 HTTP 1.1 开始, 就默认是开启了 Keep-Alive。