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

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

  •  
  •   Kirscheis Oct 14, 2023 2215 views
    This topic created in 941 days ago, the information mentioned may be changed or developed.

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

    参考资料
    https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent#status_codes
    SHF
        4
    SHF  
       Oct 15, 2023   1
    不合理,1003 只能用于底层实现,使用自定义的吧 4000 ~ 4999 吧
    About     Help     Advertise     Blog     API     FAQ     Solana     1434 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 165ms UTC 17:00 PVG 01:00 LAX 10:00 JFK 13:00
    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