响应 WebSocket 升级请求

Riy*_*eed 5 websocket

我有一个 WebSocket 服务器,它从不同的客户端获取 WebSocket 升级请求。根据请求的查询或路径参数,有时服务器需要拒绝这些升级请求。服务器需要取消握手不是因为它不支持协议或因为客户端违反了协议,而是因为提到的其他原因。

在这种情况下是否有标准状态代码可以响应?该规范似乎并没有定义这种情况下,响应状态代码。这里还提到,如果客户端违反协议,服务器应该响应“400 Bad Request”,但如果服务器只是出于其他原因想取消握手,则没有提及要发送的响应.

服务器可以在不违反协议的情况下选择任何状态码的响应吗?

t.n*_*ese 4

对于这些 url,服务器可以响应,就好像它不知道有关 WebSocket 的任何信息一样。所以简单的 400 错误是完全可以的。并且您不需要在正文中显示任何其他信息,或添加任何其他标题。

在较大的服务器设置中,通常有一个反向代理接受每个传入请求,并根据 URL 将此请求转发到相应的应用程序,如果基于 HTTP 的协议要求此反向代理具有了解所有协议。

一旦发送了客户端的打开握手,客户端必须等待服务器的响应,然后再发送任何进一步的数据。客户端必须验证服务器的响应,如下所示:

  1. 如果从服务器收到的状态代码不是 101,则客户端将按照 HTTP [RFC2616] 过程处理响应。

400错误描述如下:

6.5.1. 400 错误请求

400(错误请求)状态代码表示服务器由于被认为是客户端错误(例如格式错误的请求语法、无效的请求消息帧或欺骗性请求路由)而无法或不会处理请求。

这也将匹配不支持该协议的 URL 的升级请求。

4xx 错误代码定义如下:

6.5. 客户端错误 4xx

4xx(客户端错误)状态代码类别表示客户端似乎出现了错误。除非响应 HEAD 请求,否则服务器应该发送包含错误情况解释的表示,以及它是临时情况还是永久情况。这些状态代码适用于任何请求方法。用户代理应该向用户显示任何包含的表示。

因此,状态为 400 且没有进一步信息的响应是有效的,因为这些是可选的。