使用 JSON 格式传输的 WebSocket 收到非 JSON 数据时,使用 1003 关闭码合理吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kirscheis
V2EX    Web Dev

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

  •  
  •   Kirscheis 2023 年 10 月 14 日 2156 次点击
    这是一个创建于 908 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在很久以前,我为我们小组实验室内部使用的一些 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 日 via Android
    “应该使用一个自定义的 4xxx 代码”
    那这个代码的具体错误信息是什么?
    Nazz
        2
    Nazz  
       2023 年 10 月 15 日
    服务端能用 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 日   1
    我倾向于无脑 1000 或者使用 4000~4999 的自定义状态码, 能使服务端/客户端正常工作就好, 不想去过分纠结.

    参考资料
    https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent#status_codes
    SHF
        4
    SHF  
       2023 年 10 月 15 日   1
    不合理,1003 只能用于底层实现,使用自定义的吧 4000 ~ 4999 吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     994 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:04 PVG 03:04 LAX 1:04 JFK 15:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86