S:客户端的发送能力没问题 C:服务端的接收能力没问题 以及发送能力没问题 S:客户端接收能力没问题
客户端发送一个fin,关闭客户端到服务端的传送(一次挥手) 服务端收到fin,知道客户端想要断开连接。返回fin表明知道断开连接,(二次挥手) 服务端返回数据(三次挥手) 客服端收到fin,关闭连接(四次挥手)
HTTP
是超文本传输协议
,HTTP
是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
特点
:无连接``无状态``灵活
无连接:请求连接结束之后会断开,(http1.1之后会保持永久连接)
无状态:每次请求都是独立的,不会记录任何信息
灵活:通过http
协议中头部的Content-Type
标记,可以传输任意数据类型的数据对象(文本、图片、视频等等),非常灵活
缺点
无状态
、不安全
、明文传输
、队头阻塞
无状态:无连接信息,无法区分多个请求者身份是否为同一个客户端
不安全:明文传输
可能被窃听
,缺少身份认证
也可能遭遇伪装
,还有缺少报文完整性验证
可能遭到篡改
明文传输:报文(header
部分)使用的是明文,直接将信息暴露给了外界
队头阻塞:
HTTP 报文组成
http
报文:由请求报文
和响应报文
组成
请求报文:由请求行
、请求头
、空行
、请求体
四部分组成
响应报文:由状态行
、响应头
、空行
、响应体
四部分组成
优点:
https可进行加密传输
,身份验证
比http安全
缺点:
证书费用及更新维护
加密解密需要耗费更多的服务器资源
握手阶段比较费时
参考文章(juejin.cn/post/716687… 全双工通信协议
,即时通信
,替代轮询
WebSocket 握手协议 与 Http握手 的区别
WebSocket
的握手协议相比 Http
原本的握手协议 ,多了两个属性:
Upgrade:webSocket
Connection:Upgrade
客户端发送的握手协议,带有两个额外的属性,服务端就会返回101
状态码,客户端收到101
状态码后就成功。
websocket心跳
可能会有某些未知情况导致 socket
断开,而客户端和服务端却不知道,需要客户端定时发送一个心跳 ping
让服务端知道自己在线
服务端也需要回答一个 心跳 pong
告诉客户端自己可用,否则视为断开。
WebSocket 状态
短轮询
:前端用定时器每隔一段时间ajax
就向后端获取更新;长轮询
:长轮询是短轮询的改进,请求到服务端后会被挂起,直到有新的消息才会返回响应;然后再重新发起请求;基于流
:基于流的推送技术就是指 SSE
;SSE
是一个H5
的属性,它只能由服务器向浏览器发送数据,所以协作式通过 http
发送消息,sse
接受消息;Websocket
:WebSocket
是 HTML5
开始提供的一种在单个 TCP
连接上进行全双工通信
的协议;钉钉表格就是用的原生WebSocket
;Socket.io
:其实 Socket.IO
只是为了解决 websocket
的兼容性的一个解决方案,因为websocket
出现的较新,所以一些老的浏览器兼容性不好,而 Socket.IO
就是将websocket
、长轮询
两种通信方式
封装成了统一的通信接口进行降级兼容;单工、半双工和全双工通信
单工通信是
指消息只能单方向传输的工作方式,数据信息从一端到另一端是单方向的。例:广播。半双工通信
可以实现双向的通信,但是不能在两个方向同时进行,必须交替进行。这中模式下,接收端和发送端可以互相转换。例:对讲机。全双工通信
是指在通信的任意时刻,都允许数据同时在两个方向上传输,在这个模式下,通信系统的每一端都设置了发送器和接收器