一、"http连接"的说法不准确
http 属于 网络层协议,实际上网络层协议只是发起请求和响应请求,解决路由寻址等问题,所以http连接这个说法应该是不准确的。
本质上的连接是传输层的TCP连接,所以长连接短链接是针对TCP连接而言的。TCP主要负责可靠地传输数据包,保证数据包顺序的发送和接收。
二、http1.0 ,?http1.1,http2?的TCP长短连接
http1/.0版本,默认使用TCP短链接,客户端每发起一次请求,就与服务器建立一次连接,本次任务结束,连接断开。
http /1.1版本,默认使用TCP长连接,connect-type: keep-alive,长连接不会一致存在,会有生存周期,在空闲一段时间后会失效,这个时间可以设置,beego里可设置idletimeout。并发时,一个客户端可与同一个域名产生多个长连接
http2 版本,一个客户端与一个域名只会产生一个长连接。
- 同域名下所有通信都在单个连接上完成。
- 单个连接可以承载任意数量的双向数据流。
- 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
这一特性,性能会有极大的提升,因为:
- 同个域名只需要占用一个TCP连接,消除了因多个TCP连接而带来的延时和内存消耗。
- 单个连接上可以并行交错的请求和响应,之间互不干扰。
关于http2.0可查看https://blog.csdn.net/whatday/article/details/101927361
三、长连接与短链接
短连接:客户端每次请求,都会与服务器建立一次连接,任务执行完成后,此连接断开。
? ? ? ? 优点:好管理;
? ? ? ? 缺点:每一次连接建立都要经过三次握手,断开连接都需要4次挥手。耗费较多的时间和带宽
长连接:客户端与服务器的连接在有效时间内一直保存,除非客户端或服务器端主动端口,或者到达了空闲时长,自动断开。一般浏览器会限制同一域名建立长连接数,如google,应该是6个。
? ? ?缺点:如果一个客户端恶意并发,服务器未对统一ip的连接数作限制,可能会导致服务器建立过多无效长连接,消耗资源,导致服务器出问题。
http2.0 一个客户端与一个服务器端只需要维护一个长连接,是否可以认为有助于解决客户端恶意攻击的问题
|