前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无连接应用协议HTTP和keep-alive功能的关系

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

作者头像
清菡
发布2022-06-21 15:19:21
1620
发布2022-06-21 15:19:21
举报
文章被收录于专栏:清菡软件测试清菡软件测试

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请求只能发一次,请求完毕就结束了。后来的请求都是新的?

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 清菡软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.HTTP:无连接应用协议
  • 2.Keep-Alive设置
  • 3.补充
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档