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+ 原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。