无连接应用协议HTTP和keep-alive功能的关系

1.HTTP:无连接应用协议

  • 限制每次连接只处理一个请求。

  • 服务器处理完客户的请求,并收到客户的应答后,即断开连接。

这种方式就叫做无连接的,因为它不会去保持这个连接。

初衷: 协议的设计者是为了给服务器处理很多用户(用户量比较大,上百万用户),它们分别给服务器发过来的页面请求。

这么多用户都在发请求,但是单个用户来说,它的浏览器和服务器之间交换数据的间歇性比较大。(用户现在在访问数据,可能很长时间没有交互的)。

单个用户的页面请求,有突发性和瞬时性。可能一段时间很多,一段时间又停了。

而且有些网页比较发散,导致这次请求和下次请求之间的数据没有关联性。

这个用户访问服务器,如果这个连接一直保持的话,就是资源的浪费。这样服务器的压力就特别大。

故意设计成这样:即时有请求来了就即时建立连接,请求完毕之后马上释放连接。

给到其它用户使用,保证访问服务器的处理效率,避免了资源浪费。

问题:网页越来越复杂。比如页面中有很多的图片信息。挨个访问图片的时候都要重新建立一次tcp的连接,效率就很低。

为了解决这个问题就加了一个keep-alive功能,放在Connection这个头部字段里面。

2.Keep-Alive设置

1)开启:Connection:keep-alive。会发起Keep-Alive的连接请求,是个长连接(保持连接的这样一个状态)。

HTTP1.1版本--长连接的开关默认是打开的。

这个服务器给这个请求设置了保持连接的这样一个状态。

在同一个连接里面:把它设置成一个长连接,后面请求各种图片各种信息,都可以在这一个连接里面完成,后续对服务器的请求就不需要重新建立连接。

2)关闭:在http头中设置Connection:close,即可关闭。

一直保持长连接也会造成服务器压力过大,资源浪费的问题。所以根据需求去设置Keep-Alive的连接时间。

3)设置连接时间:

在http header中设置Keep-Alive:timeout=5,max=1000

  • timeout是超时时间,单位秒,超过这个时间后就断开连接。释放连接给别的用户使用。

  • max是最多的连接次数,若超过这个次数就强制断开连接。

3.补充

访问一个网站的首页,肯定先是get请求去服务器上拿到图片,再在首页展示的。

一个页面中有很多图片,get请求获取图片的时候,每次获取一张吗?

get请求一次,拿一张图片,拿到了,请求就结束了。多个图片就用多个请求去拿。 get请求就结束了啊?!那我剩下的图片用啥请求拿?还是和上一个get请求一模一样的请求拿吗?

HTTP1.2协议有请求复用的机制。

HTTP1.1就是重新发一个新的请求哇。重新发一个新的请求也得是get的请求,和上一个拿图片的请求一模一样。

然后新的请求和老的请求里的响应头部里的Connection字段里应该都有keep_alive且设置了连接时间。获取图片的请求都是在同一个tcp连接里。当所有的图片获取完毕后,tcp连接断开。

是不是所有请求,无论get还是post请求只能发一次,请求完毕就结束了。后来的请求都是新的?

嗯,基本都是,具体得看协议。


公众号 清菡软件测试 首发,更多原创文章:清菡软件测试 180+ 原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。

TCP Keep-alive是一种机制,用于检测并恢复网络连接中存在的故障情况。当两个系统之间的网络连接长时间没有数据交换,TCP协议可能会认为该连接已断开,并关闭连接以防资源浪费。然而,在某些情况下,如Web服务器、长连接应用等,连接应该保持开放状态而不仅仅是因为无活动就关闭。 ### TCP Keep-alive的工作原理 TCP Keep-alive通过发送空的数据包来检查连接的状态。发送间隔由`TIME_WAIT`定时器控制,默认设置下这个间隔大约为7200秒(两小时)。如果在这个时间周期内接收端没有接收到任何来自对端的数据包,那么接收端会自动向源端发送一个ICMP消息,提示对方其连接已经超时。同时,接收端将更新其本地的超时计数器,准备在未来的时间周期再次尝试连通。 ### 实现TCP Keep-alive的方式 #### 服务器端: 对于服务器端,通常不需要显式配置TCP Keep-alive,因为在Linux和其他Unix系统上默认已经启用了此功能。但为了确保TCP Keep-alive能正常工作,可以调整相关的设置,例如增加`TIME_WAIT`超时时间或者更改接收数据的等待时间。 #### 客户端: 客户端需要更直接地与服务器协商开启TCP Keep-alive。这通常在建立连接的握手过程中进行,可以通过HTTP请求头或者其他特定于应用层的消息来实现。例如,在HTTP协议中,可以使用特定的HTTP版本或者自定义头部信息来触发Keep-alive机制。 ### 应用场景 TCP Keep-alive特别适用于需要长时间保持连接应用,比如Web服务、文件传输协议(FTP)、远程桌面协议(RDP)以及其他任何依赖于持续连接应用程序。它有助于提高系统的整体可用性和用户体验,避免因偶然的网络波动导致的意外断开连接。 ### 相关问题: 1. **TCP Keep-alive的配置方法是什么?** - 对于服务器,可以在运行时通过命令行参数或者配置文件来调整`TIME_WAIT`超时时间; - 对于客户端,需要根据使用的应用程序或协议文档来了解如何启用或配置TCP Keep-alive。 2. **TCP Keep-alive在哪些情况下可能导致问题?** - 过短的`TIME_WAIT`超时时间可能会导致频繁的连接尝试; - 过长的超时时间则可能影响资源占用以及系统的响应速度。 3. **是否所有的网络环境下都适合使用TCP Keep-alive?** - 不一定。在高带宽、低延迟环境中,TCP Keep-alive可能是有益的;但在流量密集型网络或者对网络资源非常敏感的情况下,过多的Keep-alive操作可能会带来额外的网络负担。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清菡软件测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值