面试题答案
一键面试主要区别
- 连接性质
- HTTP:是无状态的短连接协议,每次请求 - 响应完成后,连接就会关闭。客户端发起请求,服务器返回响应,然后连接断开。例如浏览器请求一个网页,服务器返回网页内容后,连接就结束了。
- WebSocket:是有状态的长连接协议,一旦建立连接,客户端和服务器之间可以持续进行双向通信。比如实时聊天应用,连接建立后双方可以不断发送消息。
- 通信方式
- HTTP:是单向请求 - 响应模式,只能由客户端发起请求,服务器响应。客户端不主动请求,服务器无法主动向客户端推送数据。
- WebSocket:支持双向通信,客户端和服务器都可以主动向对方发送数据。例如在股票行情实时推送场景中,服务器可以主动将最新行情数据推送给客户端。
- 头部开销
- HTTP:每次请求都需要携带大量的头部信息,即使是简单请求,头部也可能包含诸如Cookie、User - Agent等信息,增加了数据传输量。
- WebSocket:在建立连接时会有一定的头部开销用于握手,但连接建立后,数据传输时头部开销相对较小,提高了数据传输效率。
- 协议层次
- HTTP:应用层协议,基于TCP协议之上。
- WebSocket:也是应用层协议,但它在传输层同样基于TCP协议,不过它定义了一套不同于HTTP的握手和数据传输规范。
WebSocket协议建立连接关键步骤
- 客户端发起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: websocket
和Connection: Upgrade
表明要将连接升级为WebSocket连接;Sec - WebSocket - Key
是一个随机生成的Base64编码字符串,用于验证服务器是否支持WebSocket协议;Sec - WebSocket - Version
指定WebSocket协议版本。
- 服务器响应
- 服务器收到请求后,如果支持WebSocket协议,会返回一个HTTP响应,例如:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec - WebSocket - Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
HTTP/1.1 101 Switching Protocols
状态码表示协议切换成功;Upgrade
和Connection
字段同样表明协议升级;Sec - WebSocket - Accept
字段的值是通过将客户端发送的Sec - WebSocket - Key
加上一个固定字符串258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11
,然后进行SHA - 1哈希运算并Base64编码得到的,用于证明服务器支持WebSocket协议并且可以正确处理客户端请求。
- 连接建立
- 客户端收到服务器的响应后,如果验证
Sec - WebSocket - Accept
等字段正确,那么WebSocket连接就成功建立。此时客户端和服务器可以通过这个TCP连接进行双向数据传输,不再使用HTTP协议的请求 - 响应模式,而是按照WebSocket协议的数据帧格式进行数据的发送和接收。
- 客户端收到服务器的响应后,如果验证