MST

星途 面试题库

面试题:网络编程之WebSocket协议基础

请简述WebSocket协议与HTTP协议的主要区别,并说明WebSocket协议在建立连接过程中的关键步骤。
48.1万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

主要区别

  1. 连接性质
    • HTTP:是无状态的短连接协议,每次请求 - 响应完成后,连接就会关闭。客户端发起请求,服务器返回响应,然后连接断开。例如浏览器请求一个网页,服务器返回网页内容后,连接就结束了。
    • WebSocket:是有状态的长连接协议,一旦建立连接,客户端和服务器之间可以持续进行双向通信。比如实时聊天应用,连接建立后双方可以不断发送消息。
  2. 通信方式
    • HTTP:是单向请求 - 响应模式,只能由客户端发起请求,服务器响应。客户端不主动请求,服务器无法主动向客户端推送数据。
    • WebSocket:支持双向通信,客户端和服务器都可以主动向对方发送数据。例如在股票行情实时推送场景中,服务器可以主动将最新行情数据推送给客户端。
  3. 头部开销
    • HTTP:每次请求都需要携带大量的头部信息,即使是简单请求,头部也可能包含诸如Cookie、User - Agent等信息,增加了数据传输量。
    • WebSocket:在建立连接时会有一定的头部开销用于握手,但连接建立后,数据传输时头部开销相对较小,提高了数据传输效率。
  4. 协议层次
    • HTTP:应用层协议,基于TCP协议之上。
    • WebSocket:也是应用层协议,但它在传输层同样基于TCP协议,不过它定义了一套不同于HTTP的握手和数据传输规范。

WebSocket协议建立连接关键步骤

  1. 客户端发起HTTP升级请求
    • 客户端向服务器发送一个HTTP请求,在请求头中包含特殊的字段来表明想要将连接升级为WebSocket连接。例如:
    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec - WebSocket - Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec - WebSocket - Version: 13
    
    • 其中Upgrade: websocketConnection: Upgrade表明要将连接升级为WebSocket连接;Sec - WebSocket - Key是一个随机生成的Base64编码字符串,用于验证服务器是否支持WebSocket协议;Sec - WebSocket - Version指定WebSocket协议版本。
  2. 服务器响应
    • 服务器收到请求后,如果支持WebSocket协议,会返回一个HTTP响应,例如:
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec - WebSocket - Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
    
    • HTTP/1.1 101 Switching Protocols状态码表示协议切换成功;UpgradeConnection字段同样表明协议升级;Sec - WebSocket - Accept字段的值是通过将客户端发送的Sec - WebSocket - Key加上一个固定字符串258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11,然后进行SHA - 1哈希运算并Base64编码得到的,用于证明服务器支持WebSocket协议并且可以正确处理客户端请求。
  3. 连接建立
    • 客户端收到服务器的响应后,如果验证Sec - WebSocket - Accept等字段正确,那么WebSocket连接就成功建立。此时客户端和服务器可以通过这个TCP连接进行双向数据传输,不再使用HTTP协议的请求 - 响应模式,而是按照WebSocket协议的数据帧格式进行数据的发送和接收。