响应WebSocket升级请求

时间:2018-05-10 05:09:01

标签: websocket

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

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

服务器是否可以选择带有任何状态代码的响应而不违反协议?

1 个答案:

答案 0 :(得分:2)

对于那些URL,允许服务器响应,就好像它对WebSockets一无所知。所以一个简单的400错误是完全正常的。并且您不需要在正文中显示任何进一步的信息,或者添加任何其他标题。

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

  

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

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

400错误描述为:

  

6.5.1。 400错误请求

     

400(错误请求)状态代码表示服务器不能或      由于被认为是某种东西,它不会处理请求      客户端错误(例如,格式错误的请求语法,无效请求      消息框架或欺骗性请求路由)。

这也会匹配不支持该协议的网址的升级请求。

4xx错误代码定义如下:

  

6.5。客户端错误4xx

     

4xx(Client Error)类状态代码表示客户端      似乎有错误。除了响应HEAD请求时,      服务器应该发送一个包含对的解释的表示      错误情况,无论是暂时的还是永久的      条件。这些状态代码适用于任何请求方法。      用户代理应该向用户显示任何包含的表示。

因此,具有400状态且没有其他信息的响应是有效的,因为这些是可选的。