WebSocket关闭代码1002

Fra*_*y I 7 websocket node.js

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

  1002 indicates that an endpoint is terminating the connection due
  to a protocol error.
Run Code Online (Sandbox Code Playgroud)

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

obe*_*tet 11

错误代码1002用于低级别WebSocket协议违规.例如,WebSocket消息是文本消息,但有效负载包含无效的UTF8.你不应该在那种情况下使用它.错误1002通常由WebSocket实现的内部生成,而不是使用WebSocket的应用程序生成.

现在,在您的情况下,您有两种选择:

  1. 如果在WebSocket打开握手期间客户端可能已被识别为"太旧",则可能已使用HTTP错误请求400使握手失败.

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

后者更灵活,为客户提供更好的反馈.特别是,浏览器中的JavaScript只能访问密码(2),而不能访问(1)中的任何HTTP错误.

另一个值得注意的方面:符合标准的WebSocket实现将不允许应用程序触发关闭1002.允许应用程序使用的唯一密码1000(是"正常"关闭)和3000 - 3999(app使用,但在IETF注册)和4000 - 4999(app use,private unregistered).