我编写了一个使用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
解决方法
错误代码1002用于低级别WebSocket协议违规.例如,WebSocket消息是文本消息,但有效负载包含无效的UTF8.你不应该在那种情况下使用它.错误1002通常由WebSocket实现的内部生成,而不是使用WebSocket的应用程序生成.
现在,在您的情况下,您有两种选择:
>如果在WebSocket打开握手期间已经将客户端识别为“太旧”,则可能已使用HTTP错误请求400使握手失败.
>您可以允许握手完成,执行一些确定客户端版本的WebSocket消息交换,然后使用4000-4999范围内的错误代码关闭连接(执行正确的WebSocket关闭握手).是的,这个范围是合适的. https://tools.ietf.org/html/rfc6455#section-7.4.2
后者更灵活,为客户提供更好的反馈.特别是,浏览器中的JavaScript只能访问密码(2),而不能访问(1)中的任何HTTP错误.
另一个值得注意的方面:符合标准的WebSocket实现将不允许应用程序触发1002关闭.允许应用程序使用的唯一关闭代码是1000(这是“正常”关闭)和3000 – 3999(应用程序使用,但在IETF)和4000 – 4999(app use,private unregistered).