本文主要介绍websocket的相关概念及知识,包含:
- 概念
- 报文格式
一、概念
websocket是由html5提出的一种基于TCP协议的支持客户端和服务端进行全双工通信的协议。
传统的http协议是无状态的,并且服务端是被动的,只有在客户端发起请求时返回相应的响应消息,一个请求消息对应一个响应消息,服务端无法主动向客户端推送消息,这样导致了一些涉及到即使消息相应的web应用需要使用以下方式进行实时消息的传送:
- 轮询(polling)
即客户端不断地向服务器发起请求,客户端依次进行响应,很显然这样的方式非常地浪费资源,并且需要服务端有很快的响应速度。 - 长连接(long-polling)
长连接是指客户端在向服务端发起请求以后,服务端直到发生更新的时候将响应消息返回给客户端。 这里具体的实现又分为长轮询和流技术两种技术。
这种情况下websocket出现,很好地解决了以上问题,已经被广泛地使用在涉及到实时消息响应的相关应用中。
二、报文格式
1. 请求报文格式
GET /webfin/websocket/ HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: <a href="http://localhost/"><code>http://localhost</code></a>:8080
Sec-WebSocket-Version: 13
可以看到报文格式类似HTTP协议的报文格式,其中主要是Upgrade(表明是websocket类型的消息)、Connection、Sec-WebSocket-Key(经过base64编码的密文)、Sec-WebSocket-Version(协议版本)几个字段。
2. 响应报文格式
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
响应报文中的Sec-WebSocket-Accept对于请求报文中的Sec-WebSocket-Key。