HTTP状态码之101


定义

HTTP 101 Switching Protocol(协议切换)状态码表示服务器客户端升级协议的请求对协议进行切换。web


实现协议切换的原理


  1. Connection: UpgradeConnection头被设置为"Upgrade"以表示的升级要求。Upgrade:
    protocols
    所述Upgrade标头指定的一个或多个以逗号分隔的协议名称。
  2. 检查服务器是否支持客户端所须要的协议。
  3. - 服务器可拒绝升级-在这种状况下,它发送回一个普通。或接受升级,在这种状况下,它会发送一个"101 Switching Protocols"带有升级标头的指定所选协议的标头。


咱们来看一个实际的例子:bash

image.png

应用场景

此机制始终由客户端发起,而且服务器可能接受或拒绝切换到新协议。客户端可以使用经常使用的协议(如HTTP / 1.1)发起请求,请求说明须要切换到HTTP / 2或甚至到WebSocket。服务器


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: websocketConnection: 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

整个过程像这样:加密


image.png


参考

相关文章
相关标签/搜索