【问题标题】:Websocket: "Invalid frame header" if I send 130+ char as my close messageWebsocket:如果我发送 130+ 字符作为关闭消息,则“帧头无效”
【发布时间】:2016-12-15 23:12:33
【问题描述】:

我使用ws node.js 模块和html5 WebSocket

Websocket 连接在用户启动导入时启动,并在导入成功或出现错误时关闭。

有时错误消息很长(超过 130 个租船人)

如果这些长消息通过close 事件发送,Chrome 会抛出“Invalid frame header”错误:

ws.close(1008, 'Really long error Really long error Really long error Really long error Really long errorReally long error Really long error')

我做错了什么?
我该如何解决?

【问题讨论】:

  • 这只是一个猜测,但控制帧(又名 Close、Ping、Pong)不能分段 => RFC 6455。看起来 Chrome 正在分割消息,因为消息太长了。

标签: javascript node.js html websocket


【解决方案1】:

websocket 规范RFC6455 在第 5.5 节中声明

All control frames MUST have a payload length of 125 bytes or less
and MUST NOT be fragmented.

即控制帧不能被分段(如@David Gölzhäuser 所述),并且它们的有效载荷长度限制为 125 字节。

我刚刚使用 Chrome 在 websocket 上发送了一个关闭请求,但 Chrome 抛出了异常

Failed to execute 'close' on 'WebSocket': The message must not be greater than 123 bytes.

但是如果某个库会尝试对消息进行分段或使用扩展长度的消息,那么就会抛出您所看到的错误。

【讨论】:

    猜你喜欢
    • 2015-09-24
    • 2019-08-10
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2017-11-26
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多