如何从html5 websocket计算出有效负载大小

时间:2013-08-16 10:50:53

标签: java html5 websocket byte payload

如何通过websockets告知html5消息的有效负载长度?

我知道基本协议由一个操作码组成,然后长度由下一个1到8个字节决定,然后下面的值是散列,然后其余的是有效载荷!

我创建了一个javaserveride应用程序,它将从html5客户端接收消息然后处理,iI可以处理最多256个字节的消息。

任何帮助即使手动完成这项任务也会很好(即如何使用确定有效载荷的字节)

干杯

1 个答案:

答案 0 :(得分:6)

有三种方法可以对websocket框架的有效负载长度进行编码,这取决于有效负载的长度:

  1. 125或更少
  2. 126-65535
  3. 65536 +
  4. 通过查看第二个字节的7个最后一位的值(第二个字节的第一个位是屏蔽标志),可以告诉使用哪种方式。

    当它低于126时,它是有效载荷长度。 当它为126时,有效载荷长度在以下两个字节中。 当它为127时,有效载荷长度为以下8个字节。

    因此,您必须遵循以解释websocket框架的算法是:

    1. 读取第一个字节(“byte0”)以获取fin标志和操作码
    2. 读取第二个字节(“byte1”)
    3. byte1大于127时,从byte1减去127并将masked设为true
    4. byte1现在为126时,读取接下来的两个字节并将其转换为short。这是payload_length
    5. byte1为127时,读取接下来的八个字节并将其转换为long。这是payload_length
    6. byte1为其他内容时,payload_length等于byte1
    7. 的值
    8. masked为真时,读取下一个4字节。这是masking_key
    9. 读取payload_length中获得有效负载的字节数。
    10. masked为真时,将masking_key应用于有效负载。
    11. websocket框架中没有哈希码,你必须混淆一些东西。 websocket框架的完整性由其下面的TCP层确保。

      有关Websocket协议的更多信息,请参阅RFC 6455