需要HTTP / 1.1 426升级

Val*_*igi 4 terminal upgrade http websocket server

当尝试连接到本地主机(使用终端)时,我得到了以下答案:

HTTP / 1.1 426需要升级
服务器:WebSocket ++ / 0.3.0-alpha4

我该如何回应升级?

Rem*_*eau 6

您显然要连接到WebSocket服务器,而不是普通的HTTP服务器

服务器:WebSocket ++ / 0.3.0-alpha4

所述WebSocket协议开始于其中客户要求服务器是否允许通信升级到全双工的WebSocket讯息的基于HTTP的请求/响应握手。

426响应表示初始握手未请求适当的WebSocket升级。根据RFC 6455第4.1节客户端要求

一旦建立了与服务器的连接(包括通过代理或通过TLS加密的隧道的连接),客户端必须向服务器发送开放握手。握手由HTTP升级请求以及必填和可选标头字段的列表组成。此握手的要求如下。

  1. 握手必须是[RFC2616]指定的有效HTTP请求。

  2. 请求的方法必须是GET,HTTP版本必须至少为1.1。

    例如,如果WebSocket URI为“ ws://example.com/chat”,则发送的第一行应为“ GET / chat HTTP / 1.1”。

  3. 请求的“ Request-URI”部分必须与第3节中定义的/ resource name /(相对URI)匹配,或者是解析后具有/ resource name /,/ host /的绝对http / https URI。和/ port /匹配相应的ws / wss URI。

  4. 该请求必须包含| Host |。标头字段,其值包含/ host /加上(可选)“:”,后跟/ port /(不使用默认端口时)。

  5. 该请求必须包含| Upgrade | 标头字段,其值必须包含“ websocket”关键字。

  6. 该请求必须包含| Connection |。标头字段,其值必须包含“ Upgrade”令牌。

  7. 该请求必须包含一个标题字段,其名称为| Sec-WebSocket-Key |。这个头域的值必须是一个随机数,该随机数由一个随机选择的16字节值组成,该值已被base64编码(请参见[RFC4648]的第4节)。必须为每个连接随机选择随机数。

    注意:例如,如果随机选择的值是字节序列0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10,则标头字段的值为“ AQIDBAUGBwgJCgsMDQ4PEC =

  8. 该请求必须包含标题字段| Origin |。[RFC6454]如果请求来自浏览器客户端。如果连接来自非浏览器客户端,则如果该客户端的语义与此处针对浏览器客户端所述的用例相匹配,则请求可以包括此标头字段。该头字段的值是在其中运行建立连接的代码的上下文的来源的ASCII序列化。有关如何构造此标头字段值的详细信息,请参见[RFC6454]。

    例如,如果从www.example.com下载的代码试图建立与ww2.example.com的连接,则标头字段的值为“ http://www.example.com ”。

  9. 该请求必须包含一个标题字段,其名称为| Sec-WebSocket-Version |。这个头域的值必须是13。

    注意:尽管已发布本文档的草稿版本(-09,-10,-11和-12)(它们主要由编辑性更改和澄清组成,而不是对有线协议的更改),但值9、10、11和12未被用作Sec-WebSocket-Version的有效值。这些值在IANA注册中心中保留,但没有使用,也不会使用。

  10. 该请求可能包含一个标题字段,其名称为| Sec-WebSocket-Protocol |。如果存在,此值表示客户希望说的一个或多个逗号分隔的子协议(按优先级排序)。组成该值的元素必须是非空字符串,字符范围在U + 0021到U + 007E之间,不包括[RFC2616]中定义的分隔符,并且必须都是唯一字符串。此标头字段的值的ABNF为1#token,其中结构和规则的定义如[RFC2616]中所述。

  11. 该请求可以包括一个名称为| Sec-WebSocket-Extensions |的头字段。如果存在,则此值指示客户端希望讲话的协议级扩展。该标题字段的解释和格式在9.1节中描述。

  12. 该请求可以包括任何其他头字段,例如cookie [RFC6265]和/或与认证相关的头字段,例如|| Authorization |。标头字段[RFC2616],该字段根据定义它们的文档进行处理。

一旦发送了客户端的打开握手信号,客户端必须在发送任何其他数据之前等待服务器的响应。

客户端必须如下验证服务器的响应:

  1. 如果从服务器收到的状态代码不是101,则客户端将按照HTTP [RFC2616]过程处理响应。特别是,如果客户端收到401状态码,则可能会执行身份验证;服务器可能会使用3xx状态代码重定向客户端(但不需要客户端遵循它们),等等。否则,请按照以下步骤操作。

  2. 如果响应缺少| Upgrade | 标头字段或| Upgrade | 标头字段包含的值不是与“ websocket”值不区分大小写的ASCII字符,客户端必须使WebSocket连接失败

  3. 如果响应缺少| Connection | 标头字段或| Connection | 标头字段不包含令牌,该令牌是ASCII大小写不区分大小写的匹配项“ Upgrade”,客户端必须使WebSocket连接失败

  4. 如果响应缺少| Sec-WebSocket-Accept | 标头字段或| Sec-WebSocket-Accept | 包含除| Sec-WebSocket-Key |的串联的base64编码的SHA-1以外的值。(作为字符串,而不是base64解码的)字符串“ 258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,但忽略任何前导和尾随空格,客户端必须使WebSocket连接失败

  5. 如果响应包含| Sec-WebSocket-Extensions | 标头字段和此标头字段指示使用客户端握手中不存在的扩展名(服务器已指示客户端未请求扩展名),客户端务必使WebSocket连接失败。(在第9.1节中讨论了解析此标头字段以确定请求哪些扩展)。

  6. 如果响应包含| Sec-WebSocket-Protocol | 标头字段和此标头字段指示使用客户端握手中不存在的子协议(服务器已指示客户端未请求的子协议),客户端必须使WebSocket连接失败

如果服务器的响应不符合本节和第4.2.2节中定义的服务器握手要求,则客户端务必使WebSocket连接失败

请注意,根据[RFC2616],HTTP请求和HTTP响应中的所有标头字段名称都不区分大小写。

如果服务器的响应如上所述得到验证,则表示WebSocket连接已建立,并且WebSocket连接处于OPEN状态。