V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kirscheis
V2EX  ›  Web Dev

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

  •  
  •   Kirscheis · 2023-10-14 22:11:35 +08:00 · 1646 次点击
    这是一个创建于 403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在很久以前,我为我们小组实验室内部使用的一些 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 ,大家在生产代码里怎么规范这件事?

    ysc3839
        1
    ysc3839  
       2023-10-14 23:13:11 +08:00 via Android
    “应该使用一个自定义的 4xxx 代码”
    那这个代码的具体错误信息是什么?
    Nazz
        2
    Nazz  
       2023-10-15 08:48:53 +08:00
    服务端能用 1003, 客户端不行, chrome 会报错: Failed to execute 'close' on 'WebSocket': The code must be either 1000, or between 3000 and 4999. 1003 is neither.
    Nazz
        3
    Nazz  
       2023-10-15 09:11:53 +08:00   ❤️ 1
    我倾向于无脑 1000 或者使用 4000~4999 的自定义状态码, 能使服务端/客户端正常工作就好, 不想去过分纠结.

    参考资料
    https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent#status_codes
    SHF
        4
    SHF  
       2023-10-15 11:54:55 +08:00   ❤️ 1
    不合理,1003 只能用于底层实现,使用自定义的吧 4000 ~ 4999 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3661 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:37 · PVG 18:37 · LAX 02:37 · JFK 05:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.