WebSocket关闭代码1002

时间:2014-03-23 05:28:35

标签: node.js websocket

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

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

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

1 个答案:

答案 0 :(得分:10)

错误代码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

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

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