MST
星途 面试题库

面试题:网络编程中WebSocket的协议握手过程是怎样的?

请详细描述WebSocket客户端与服务器之间进行协议握手的具体步骤,包括请求头和响应头中重要字段的含义与作用。
37.3万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

WebSocket客户端与服务器协议握手步骤

  1. 客户端发起HTTP升级请求
    • 客户端向服务器发送一个HTTP请求,通过特殊的请求头表明要发起WebSocket连接。
    • 示例请求:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec - WebSocket - Version: 13
  1. 服务器响应升级请求
    • 服务器收到请求后,如果支持WebSocket协议,会返回一个HTTP响应,表明同意将连接升级为WebSocket连接。
    • 示例响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

请求头重要字段含义与作用

  1. Upgrade
    • 含义:表明客户端希望将当前连接升级到指定协议,这里值为websocket,表示要升级为WebSocket协议。
    • 作用:告知服务器客户端的协议升级意图。
  2. Connection
    • 含义:值为Upgrade,配合Upgrade头字段,进一步强调是协议升级的连接。
    • 作用:确保中间代理服务器等不会误解请求,正确处理协议升级请求。
  3. Sec - WebSocket - Key
    • 含义:是一个Base64编码的随机字符串,由客户端生成。
    • 作用:用于服务器验证请求的合法性。服务器会将这个值与一个固定字符串(258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11)拼接,然后进行SHA - 1哈希运算,再进行Base64编码,得到的结果作为Sec - WebSocket - Accept头字段的值返回给客户端。
  4. Origin
    • 含义:标识请求的源地址,格式为协议://域名[:端口]
    • 作用:服务器可以根据这个字段进行跨域访问控制,决定是否接受该WebSocket连接请求。
  5. Sec - WebSocket - Version
    • 含义:客户端支持的WebSocket协议版本号。
    • 作用:服务器可以根据这个版本号决定是否支持客户端请求的协议版本,如果不支持可以返回错误响应。

响应头重要字段含义与作用

  1. 101 Switching Protocols
    • 含义:HTTP状态码,表示服务器同意将连接升级到新的协议(即WebSocket协议)。
    • 作用:告知客户端协议升级成功。
  2. Upgrade
    • 含义:同请求头中的Upgrade,表明服务器同意将连接升级到websocket协议。
    • 作用:确认协议升级的目标协议。
  3. Connection
    • 含义:同请求头中的Connection,值为Upgrade,强调协议升级的连接。
    • 作用:与请求头呼应,确保整个连接升级过程的一致性。
  4. Sec - WebSocket - Accept
    • 含义:服务器对Sec - WebSocket - Key进行处理后得到的Base64编码字符串。
    • 作用:客户端通过验证这个值与自己计算的预期值是否一致,来确认服务器是合法的WebSocket服务器,从而完成握手过程。