WebSocketclosures代码1002

我已经编写了一个使用Web套接字在服务器和客户端之间进行通信的应用程序。 我想处理客户端过期(太旧)的情况,从而误解/不恰当地处理消息。 我的想法是,如果客户端太旧,我closures连接并发送相应的状态码。 我读了规范,似乎1002 可能是适当的代码:

1002 indicates that an endpoint is terminating the connection due to a protocol error. 

但是,我实际上并不知道这意味着什么(如果它实际上是指Web套接字协议,并因此导致较低级别的错误)。 1002是否适合这个,或者我应该在4000-4999区域中定义一个自定义(应用程序)closures代码: https : //developer.mozilla.org/en-US/docs/Web/API/CloseEvent

错误代码1002用于低级WebSocket协议违规。 就像,WebSocket消息是一个文本消息,但有效载荷包含无效的UTF8。 你不应该用这种情况。 错误1002通常由WebSocket实现的内部生成,而不是使用WebSocket的应用程序生成。

现在,在你的情况下,你有两个select:

  1. 如果在WebSocket打开握手过程中客户端可能被识别为“太旧”,则可能已经使用HTTP Bad Request 400进行握手失败。

  2. 您可能允许握手完成,执行一些确定客户端版本的WebSocket消息交换,然后使用4000-4999范围内的错误代码closures连接(执行正确的WebSocketclosures握手)。 是的,这个范围是适当的。 https://tools.ietf.org/html/rfc6455#section-7.4.2

后者更灵活,给客户更好的反馈。 尤其是,浏览器中的JavaScript只能访问closures的代码(2),而不是(1)中的任何HTTP错误。

另一个值得注意的方面是:符合的WebSocket实现将不允许应用程序触发1002closures。 允许应用程序使用的唯一的closures代码是1000 (这是“正常”closures)和3000 - 3999 (应用程序使用,但在IETF注册)和4000 - 4999 (应用程序使用,私人未注册)。