MST

星途 面试题库

面试题:网络编程之WebSocket连接建立过程

请详细描述WebSocket在客户端和服务器端建立连接的具体过程,包括涉及的HTTP请求头和响应头信息。
14.0万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

WebSocket在客户端和服务器端建立连接过程

  1. 客户端发起HTTP请求
    • 客户端向服务器发送一个带有特殊头信息的HTTP请求,以发起WebSocket连接。这个请求看起来像普通HTTP请求,但包含WebSocket特定的头信息。
    • 关键请求头信息
      • Upgrade:值为websocket,表示客户端希望将协议从HTTP升级到WebSocket,例如Upgrade: websocket
      • Connection:值为Upgrade,表明这是一个协议升级请求,例如Connection: Upgrade
      • Sec - WebSocket - Key:是一个随机生成的Base64编码字符串,用于安全验证。例如Sec - WebSocket - Key: dGhlIHNhbXBsZSBub25jZQ==。这个密钥会被服务器用来验证请求的合法性。
      • Sec - WebSocket - Version:指定客户端支持的WebSocket协议版本,目前常用版本为13,例如Sec - WebSocket - Version: 13
  2. 服务器响应
    • 服务器收到请求后,如果支持WebSocket协议并且验证通过,会返回一个HTTP响应,表明协议升级成功。
    • 关键响应头信息
      • Upgrade:同样为websocket,确认协议升级为WebSocket,例如Upgrade: websocket
      • Connection:为Upgrade,确认这是协议升级响应,例如Connection: Upgrade
      • Sec - WebSocket - Accept:服务器通过将客户端发送的Sec - WebSocket - Key与一个固定的GUID(258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11)拼接,然后进行SHA - 1哈希运算,再进行Base64编码得到该值。例如,如果客户端Sec - WebSocket - KeydGhlIHNhbXBsZSBub25jZQ==,服务器计算后得到s3pPLMBiTxaQ9kYGzzhZRbK+xOo=,则响应头为Sec - WebSocket - Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=。此值用于证明服务器能够正确处理WebSocket连接。
  3. 连接建立
    • 当客户端收到服务器带有上述正确响应头的HTTP响应后,WebSocket连接正式建立。之后客户端和服务器之间就可以通过这个WebSocket连接进行双向通信,不再使用HTTP协议的请求 - 响应模式,而是以帧(frame)的形式进行数据传输。