HTTP协议和WebSocket协议

HTTP协议和WebSocket协议

一、HTTP协议

  1. HTTP协议是什么?

    HTTP协议(超文本传输协议HyperText Transfer Protocol),用于从服务器传输数据到本地浏览器的传输协议,它是基于TCP协议的一个应用层传输协议,由请求和响应构成,是一种无状态的协议,简单来说就是客户端和服务端进行数据传输的一种规则。

  2. HTTP的工作过程

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

    在这个过程中客户端和服务器之间的连接和断开是怎么实现的呢?

    1. 三次握手建立连接

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

      其中,SYN 是同步序列编号的缩写,用于建立连接;ACK 是确认标志,用于确认收到对方的数据包。

      接下来举个生动形象的例子,方便理解

      • 第一次:客户端(小明)对服务器(小红)说:“喂,我想和你说话,你能听到吗?”
      • 第二次:服务器(小红)对客户端(小明)说:“我能听到,你说吧。”
      • 第三次:客户端(小明)对服务器(小红)说:“好的,我开始说了。”

      这个过程中,客户端和服务器都确认彼此能够通信,建立了连接。

      image-20231122232425275

    2. 四次挥手断开连接

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

      其中,FIN 是结束标志,用于断开连接;ACK 是确认标志,用于确认收到对方的数据包。

      接下来举个生动形象的例子,方便理解

      • 第一次:客户端(小明)对服务器(小红)说:“我说完了,我不说了。”
      • 第二次:服务器(小红)对客户端(小明)说:“我知道你说完了,但是我还有一些东西要告诉你。”
      • 第三次:服务器(小红)对客户端(小明)说:“我说完了,我不说了。”
      • 第四次:客户端(小明)对服务器(小红)说:“好的,我知道你说完了,我们断开连接吧。”

      这个过程中,客户端和服务器都确认彼此已经没有数据要传输,可以断开连接。

      image-20231122234007455

  3. HTTPS协议

    HTTPS就是加密的HTTP,它通过HTTP进行通信,利用SSL/TLS建立安全信道,加密数据包,是计算机网络进行安全通信的传输协议。

二、WebSocket协议

  1. WebSocket协议是什么?

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

  2. WebSocket的工作过程

    1. 客户端发送HTTP请求,经过三次握手,建立TCP连接,在HTTP请求里存放WebSocket支持的版本号等信息
    2. 服务器接收请求,同样以HTTP协议回应
    3. 连接成功,客户端与服务器建立持久性的连接,连接之后客户端和服务器之间就可以随时通讯了,直到其中一方关闭连接

三、两者之间的比较

  1. 相同点:
    • 都是基于TCP协议实现的
    • 都使用Request/Response模型进行连接的建立
    • WebSocket是基于HTTP的,他们的兼容性都很好
    • 在连接的建立过程中对错误的处理方式相同
    • 都可以在网络中传输数据
  2. 不同点:
    • WebSocket是持久连接,而HTTP是短连接,这意味着WebSocket可以在连接建立后保持连接状态,而HTTP需要在每次请求完成后关闭连接。
    • WebSocket是以ws/wss开头,而HTTP则是以http/https开头
    • WebSocket是有状态的,而HTTP是无状态的,这意味着WebSocket可以在连接建立后保持状态,而HTTP每次请求都是独立的。
    • WebSocket连接之后,服务器和客户端可以双向发送数据,而HTTP只能是客户端发起一次请求后,服务器才能返回数据
    • WebSocket是可以跨域的,而HTTP不行
    • WebSocket连接建立以后,数据的传输使用帧来传递,不再需要Request消息,HTTP则需要每次请求都包含Request消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值