图片授权基于 www.pixabay.com 相关协议
在 HTTP1 时代,前端在写项目的时候,小图片是要合并起来,组成一张大雪碧图,目的是为了把小图片的多个请求合并成一个请求。以便来减少浏览器和服务器的握手通信。
这个就是我们之前文章里提到过的HTTP无状态协议。
HTTP 连接是基于 TCP/IP 的。浏览器和服务器对于消息的处理是「一发一收」的模式,客户端每次请求数据都需要跟服务器握手,握手通信完之后马上关闭连接。这就是著名的 TCP 三次握手和四次挥手,这样中间就浪费了大量的建立成本。
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