MST
星途 面试题库

面试题:网络编程:WebSocket与HTTP在连接建立过程中的主要区别

请详细阐述WebSocket和HTTP在连接建立过程中有哪些不同点,例如握手的方式、请求头的差异等,并说明这些差异如何影响它们在实时通信场景中的应用。
11.0万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

握手方式

  • HTTP:HTTP是无状态协议,客户端发起请求,服务器响应,请求和响应之间没有持续连接。其握手过程是简单的请求 - 响应模式。例如,浏览器向服务器发送一个HTTP GET请求,服务器返回对应的资源。这种握手不需要额外复杂的协商过程。
  • WebSocket:WebSocket握手是基于HTTP协议实现的升级握手。客户端发送一个包含特殊头部字段Upgrade: websocketConnection: Upgrade的HTTP请求,告知服务器要将连接升级为WebSocket连接。服务器如果支持,会返回状态码101 Switching Protocols,并在响应头中携带Upgrade: websocketConnection: Upgrade,完成握手,之后双方基于WebSocket协议进行通信。

请求头差异

  • HTTP:常见请求头有Accept(指定可接受的响应内容类型)、Content - Type(指定请求体的内容类型)、User - Agent(标识客户端信息)等。这些请求头主要用于描述请求的资源类型、客户端信息以及对响应的期望等,侧重于资源获取和交互。
  • WebSocket:除了包含部分HTTP通用头,还会有特定的WebSocket头。如前文提到的Upgrade: websocketConnection: Upgrade用于请求连接升级。还有Sec - WebSocket - Key,它是一个随机生成的Base64编码字符串,服务器会用这个Key来验证请求合法性,并通过Sec - WebSocket - Accept头返回经过特定算法计算后的响应,确保握手的安全性。

对实时通信场景的影响

  • HTTP:由于其无状态和请求 - 响应模式,在实时通信场景下存在局限性。如果要实现实时数据推送,通常需要使用轮询(客户端定时发送请求获取数据)或长轮询(客户端发送请求,服务器保持连接直到有新数据才响应)技术。轮询会频繁发送请求,浪费带宽和服务器资源;长轮询虽然在一定程度上减少了请求频率,但仍需不断建立和关闭连接,开销较大,且实时性不够理想。
  • WebSocket:其全双工通信特性,一旦握手成功,客户端和服务器之间可以随时双向发送数据。这种特性使得WebSocket非常适合实时通信场景,如在线聊天、实时游戏、股票行情推送等。由于不需要频繁握手和建立连接,减少了通信开销,能够更高效地传输数据,实现真正意义上的实时交互。