websocket 和 http 协议的区别

一、http 协议的实现

超文本传输协议,用于从 www 服务器传输超文本到本地浏览器的传输协议。http 是基于 tcp 协议的一个应用层的协议,由请求和相应构成;是一个无状态的协议。

工作过程:

1、客户端和服务端建立连接,http开始工作;
2、建立连接后客户端发送请求给服务器;
3、服务器收到请求后,给予相应的响应信息;
4、客户端接收服务器返回的数据并在浏览器上展示,然后客户端和服务器连接断开。

在这个过程中客户端和服务器之间的连接和断开是怎么实现的呢?
1、三次握手建立连接

第一次:建立连接,客户端发送 SYN 包(SYN=i)到服务器,并进入 SYN_SEND 状态,等待服务器确认;
第二次:服务器接收 SYN 包,确认客户的 SYN ,同时也发送一个 SYN 包(SYN=k)+ ACK 包(ACK = i+1)给客户端,服务器进入 SYN_RECV 状态;
第三次:客户端接收到服务器的 SYN+ACK 包之后,同时向服务器发送确认包 ACK 包(ACK = k+1),然后客户端和服务器进入ESTABLISHED 状态。

完成三次握手之后,客户端和服务器开始传输数据。

2、四次挥手断开连接

第一次:客户端发送一个 FIN(i) ,用来关闭客户端和服务器的数据传输,客户端进入 FIN_WAIT_1 状态;
第二次:服务器接收 FIN ,发送一个 ACK (i+1)给客户端,服务器进入 CLISE_WAIT 状态;
第三次:服务器发送一个 FIN (j) 给客户端用来关闭服务器到客户端的数据传输,服务器进入 LAST_ACK 状态;
第四次:客户端接收到 FIN 后,客户端进入 TIME_WAIT 状态,然后发送 ACK (j+1) 给服务器,校验完成之后服务器进入 CLOSED 状态。

注意:什么是 https 呢?
https 就是加密的 http ,它通过 http 进行通信,利用 SSL/TLS 建立安全信道,加密数据包。是计算机网络进行安全通信的传输协议。

二、websocket 协议的实现

websocket 是 H5 的提出的在单个 TCP 协议上进行全双工通讯的协议。它允许服务器主动向客户端推送数据,客户端和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。

websocket 是基于 http 协议的。借助 http 协议来完成握手。

工作过程:

1、客户端发送 http 请求,经过三次握手,建立 TCP连接,在 http 请求里存放 websocket 支持的版本号等信息;
2、服务器接收请求,同样以 http 协议回应;
3、连接成功,客户端与服务器建立持久性的连接。

连接之后客户端和服务器之间就可以随时通讯,直到其中一方关闭连接。

三、两者的区别

相同点:

都是 TCP 协议;
都使用 Request/Response 模型进行连接的建立;
websocket 是基于 http 的,他们的兼容性都很好;
在连接的建立过程中对错误的处理方式相同;
都可以在网络中传输数据。

不同点:

websocket 是持久连接,http 是短连接;
websocket 的协议是以 ws/wss 开头,http 对应的是 http/https;
websocket 是有状态的,http 是无状态的;
websocket 连接之后服务器和客户端可以双向发送数据,http 只能是客户端发起一次请求之后,服务器才能返回数据;
websocket 是可以跨域的;
websocket 连接建立之后,数据的传输使用帧来传递,不再需要Request消息。

你可能感兴趣的:(前端,http,websocket,https)