面试题答案
一键面试原理
- Sec - WebSocket - Key:客户端在握手请求中发送
Sec - WebSocket - Key
字段,它是一个随机生成的Base64编码字符串。其目的是防止普通HTTP请求伪装成WebSocket请求,因为普通HTTP请求不会包含符合规范的Sec - WebSocket - Key
。 - Sec - WebSocket - Accept:服务端接收到握手请求后,根据
Sec - WebSocket - Key
计算出Sec - WebSocket - Accept
字段的值,并在握手响应中返回。客户端收到响应后,会验证返回的Sec - WebSocket - Accept
是否正确,以此确保服务端是合法的WebSocket服务端。
计算过程
- 服务端计算步骤:
- 服务端获取客户端发送的
Sec - WebSocket - Key
。 - 将
Sec - WebSocket - Key
与固定字符串258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11
拼接在一起。例如,如果Sec - WebSocket - Key
为dGhlIHNhbXBsZSBub25jZQ==
,拼接后为dGhlIHNhbXBsZSBub25jZQ==258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11
。 - 对拼接后的字符串进行SHA - 1哈希运算,得到一个20字节的哈希值。
- 将哈希值进行Base64编码,得到最终的
Sec - WebSocket - Accept
的值。例如,经过上述步骤计算后,可能得到s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
。
- 服务端获取客户端发送的
- 客户端验证步骤:
- 客户端收到服务端返回的
Sec - WebSocket - Accept
。 - 客户端使用与服务端相同的计算方法,根据自己发送的
Sec - WebSocket - Key
计算出一个预期的Sec - WebSocket - Accept
值。 - 将计算出的预期值与服务端返回的
Sec - WebSocket - Accept
值进行对比,如果两者一致,则握手合法,WebSocket连接可以建立;否则,握手失败。
- 客户端收到服务端返回的