Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
响应WebSocket升级请求_Websocket - Fatal编程技术网

响应WebSocket升级请求

响应WebSocket升级请求,websocket,Websocket,我有一个WebSocket服务器,可以从不同的客户端获取WebSocket升级请求。根据请求的查询或路径参数,有时服务器需要拒绝这些升级请求。服务器需要取消握手,不是因为它不支持协议,也不是因为客户端违反了协议,而是因为前面提到的其他原因 在这种情况下,是否有标准的状态代码来响应?似乎没有为此情况定义响应状态代码。还提到,如果客户端违反协议,服务器应响应“400错误请求”,但如果服务器只是出于其他原因取消握手,则未提及要发送的响应 服务器可以选择使用任何状态代码响应而不违反协议吗?对于这些URL

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

在这种情况下,是否有标准的状态代码来响应?似乎没有为此情况定义响应状态代码。还提到,如果客户端违反协议,服务器应响应“400错误请求”,但如果服务器只是出于其他原因取消握手,则未提及要发送的响应


服务器可以选择使用任何状态代码响应而不违反协议吗?

对于这些URL,服务器可以响应,就好像它不知道任何关于WebSocket的信息一样。因此,一个普通的400错误是完全正确的。您不需要在正文中显示任何进一步的信息,也不需要添加任何进一步的标题

在更大的服务器设置中,通常有一个反向代理,它接受每个传入的请求,并根据URL将这些请求转发给相应的应用程序。如果基于HTTP的协议要求该反向代理必须知道所有协议,那么这将是一个真正的问题

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

  • 如果从服务器接收到的状态代码不是101,则 客户端根据HTTP[RFC2616]过程处理响应
  • 400错误描述为:

    6.5.1。400错误请求

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

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

    4xx错误代码定义如下:

    6.5。客户端错误4xx

    4xx(客户端错误)类状态代码表示客户端 似乎犯了错误。除非在响应HEAD请求时 服务器应发送一个表示,其中包含对 错误情况,以及它是临时的还是永久的 条件这些状态代码适用于任何请求方法。 用户代理应向用户显示任何包含的表示

    所以一个400状态的响应是有效的,没有更多的信息,因为这些是可选的