HTTP 101 Switching Protocol
(协议切换)状态码表示服务器应客户端升级协议的请求对协议进行切换。web
Connection: Upgrade
该Connection
头被设置为"Upgrade"
以表示的升级要求。Upgrade:
protocols
所述Upgrade
标头指定的一个或多个以逗号分隔的协议名称。"101 Switching Protocols"
带有升级标头的指定所选协议的标头。咱们来看一个实际的例子:bash
此机制始终由客户端发起,而且服务器可能接受或拒绝切换到新协议。客户端可以使用经常使用的协议(如HTTP / 1.1)发起请求,请求说明须要切换到HTTP / 2或甚至到WebSocket。服务器
为了实现WebSocket通讯,首先须要客户端发起一次普通HTTP请求。也就是说,WebSocket的创建是依赖HTTP的。请求报文可能像下面这样:websocket
GET ws://websocket.example.com/ HTTP/1.1
Host: websocket.example.com
Upgrade: websocket
Connection: Upgrade
Origin: http://example.com
Sec-WebSocket-Key:pAloKxsGSHtpIHrJdWLvzQ==
Sec-WebSocket-Version:13复制代码
其中HTTP头部字段Upgrade: websocket
和Connection: Upgrade
很是重要,告诉服务器通讯协议将发生改变,转为WebSocket协议。支持WebSocket的服务器端在确认以上请求后,应返回状态码为101 Switching Protocols
的响应:markdown
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: nRu4KAPUPjjWYrnzxDVeqOxCvlM=复制代码
其中字段Sec-WebSocket-Accept
是由服务器对前面客户端发送的Sec-WebSocket-Key
进行确认和加密后的结果,至关于一次验证,以帮助客户端确信对方是真实可用的WebSocket服务器。socket
验证经过后,这个握手响应就确立了WebSocket链接,此后,服务器端就能够主动发信息给客户端了。此时的状态比较像服务器端和客户端接通了电话,不管是谁有什么信息想告诉对方,开口就行了。oop
一旦创建了WebSocket链接,此后的通讯就再也不使用HTTP了,改成使用WebSocket独立的数据帧。post
整个过程像这样:加密