根据RFC6455规范关于websocket的。 数据框结构如下:
frame-fin ; 1 bit in length
frame-rsv1 ; 1 bit in length
frame-rsv2 ; 1 bit in length
frame-rsv3 ; 1 bit in length
frame-opcode ; 4 bits in length
frame-masked ; 1 bit in length
frame-payload-length ; either 7, 7+16,
; or 7+64 bits in
; length
[ frame-masking-key ] ; 32 bits in length
frame-payload-data ; n*8 bits in
; length, where
; n >= 0
所以保持帧的字节数组的最小长度是224字节(56位)?当我在互联网上阅读以表示字节数组时,我们需要4个字节(1000)。
如何屏蔽数据?我应该掩盖哪些数据?只有帧有效负载数据或除掩码密钥以外的所有帧?
答案 0 :(得分:1)
frame-masking-key
字段仅在屏蔽帧时出现,仅对客户端发送到服务器的帧执行此操作。 frame-payload-data
是可选的;框架可能为空,不包含任何数据。因此,客户端到服务器方向上的帧的最小长度是(1 + 1 + 1 + 1 + 4 + 1 + 7 + 32)= 48位或6个字节,以及服务器中帧的最小长度到客户端方向是(1 + 1 + 1 + 1 + 4 + 1 + 7)= 16位或2个字节。
那些不带有效载荷的帧。显然,携带有效载荷数据的帧将需要额外的空间。
当我在互联网上阅读以表示字节数组中的一点时,我们需要4个字节 (1000)。
嗯,不,每个字节都有8位。在程序中使用较大的数据单元来表示位值可能很方便,但这完全独立于实际帧中使用的格式。
如何屏蔽数据?我应该掩盖哪些数据?只有帧有效载荷数据 或掩码键以外的所有帧?
通过frame-masking-key
对frame-payload-data
进行异或来掩盖。这在section 5.3 of RFC 6455。