使用 JSON 格式传输的 WebSocket 收到非 JSON 数据时,使用 1003 关闭码合理吗?

210 天前
 Kirscheis

在很久以前,我为我们小组实验室内部使用的一些 API 设计了一套 RESTful + WebSocket 架构的 API ,由于这套 API 基本上都是程序调用,所以全部使用了 JSON 来序列化和传输数据。在 WebSocket 上当时写程序的时候没有考虑太多,因为 JWT 验证失败的时候按惯例是返回的 1008 Policy Violation,所以收到非 JSON 数据的时候就用了一个类似的 1003 Unsupported Data

我的理解是凡是不支持的或者无效的数据都可以用 1003 ,但是今天和同事讨论的时候他认为 1xxx 只能用于底层实现,基本上只能由库代码返回,如果使用 JSON 格式传输的 WebSocket 收到非 JSON 数据时,应该使用一个自定义的 4xxx 代码。但是根据 RFC 的例子,文本协议的 WebSocket 收到 binary 数据又可以使用 1003 ,这很明显是库代码以外的应用。我俩一顿讨论,google 了半天也没有找到一个公认的说法。

道理上讲这个问题应该大家都遇见过,特来问问 v2 ,大家在生产代码里怎么规范这件事?

992 次点击
所在节点    Web Dev
4 条回复
ysc3839
210 天前
“应该使用一个自定义的 4xxx 代码”
那这个代码的具体错误信息是什么?
Nazz
210 天前
服务端能用 1003, 客户端不行, chrome 会报错: Failed to execute 'close' on 'WebSocket': The code must be either 1000, or between 3000 and 4999. 1003 is neither.
Nazz
210 天前
我倾向于无脑 1000 或者使用 4000~4999 的自定义状态码, 能使服务端/客户端正常工作就好, 不想去过分纠结.

参考资料
https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent#status_codes
SHF
209 天前
不合理,1003 只能用于底层实现,使用自定义的吧 4000 ~ 4999 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982029

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX