http长连接和短连接的区别(http/1.1 新建应用程序失败)

图片授权基于 www.pixabay.com 相关协议

在 HTTP1 时代,前端在写项目的时候,小图片是要合并起来,组成一张大雪碧图,目的是为了把小图片的多个请求合并成一个请求。以便来减少浏览器和服务器的握手通信。

这个就是我们之前文章里提到过的HTTP无状态协议。

HTTP 连接是基于 TCP/IP 的。浏览器和服务器对于消息的处理是「一发一收」的模式,客户端每次请求数据都需要跟服务器握手,握手通信完之后马上关闭连接。这就是著名的 TCP 三次握手和四次挥手,这样中间就浪费了大量的建立成本。

http长连接和短连接的区别(http/1.1 新建应用程序失败)

HTTP 握手建立连接

所以在 HTTP/1.1 中就带来了「长连接」功能,默认是开启状态。

长连接是什么?你连接上我,你和我通信后,咱俩就不关闭了,你就一直用当前这个连接和我沟通,等触发关闭条件时,再关闭当前连接。

长短连接对比示意图

好处显而易见。

如果客户端想使用长连接,可以明确的发出指令,在请求头带上:Connection: keep-alive 来告诉服务器,我要使用长连接机制。

如果服务器支持长连接,返回的「响应报文」也会带上 Connection: keep-alive 这个字段。
浏览器和服务器收发消息不关闭连接,这样减少了大量的重新建立连接的成本。
长连接确实长,但时间太长了,也会相应的占用大量服务器资源,你客户端总是连接着我服务器,又不跟我说话,也不向我要文件,白白占用我一个资源,时间长了,服务器也不开心。
为了解决这个问题,服务器端给出两个解决方案:
1、keepalive_timeout 指令,来约定一个超时时间,比如 1000,在当前长连接上处理达到 1000 个请求后,就会自动断开,下一次就需要重新握手。
2、keepalive_requests 指令,来约定请求次数,比如 50 次,浏览器发送请求达到 50 次时,长连接也会自动关闭。
通过这样的关闭机制来控制连接的关闭,可及时腾出服务器资源利用率。
长连接关闭还会返回响应报文带 Connection: close 字段,告诉浏览器当前连接关闭了。

内容和图片来源于:极客时间《透视 HTTP 协议》

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34491.html

Like (0)
小道研究的头像小道研究
Previous 2024年4月10日
Next 2024年4月10日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注