Chrome+JS向C# WebSocket传文件:超131k帧被截断问题排查
问题原因分析
Chrome的WebSocket分片机制:Chrome(基于Chromium内核)在发送超过128KB级别的二进制数据时,会自动将数据拆分为多个WebSocket帧发送,首个帧的负载长度固定为131000字节——这是Chromium内核默认的单帧最大传输限制,对应你查到的Bug 517090(该bug虽标注为文本帧截断,但二进制帧的分片逻辑遵循同一限制规则)。而Firefox的WebSocket实现允许更大的单帧传输容量,因此会一次性发送完整的文件数据。
服务器端未实现多帧拼接逻辑:你的C#服务器代码仅处理了单帧WebSocket数据的长度解析,没有针对WebSocket协议的分片传输做处理。当Chrome分片发送文件时,服务器只接收并解析了第一个分片帧的数据,后续的分片帧未被合并,因此你观察到首个数据块长度固定为131000字节。
协议层面的补充:WebSocket协议本身支持将单个消息拆分为多个帧传输,服务器端需要通过帧头的FIN位判断当前帧是否为消息的最后一帧,将所有属于同一消息的分片帧数据拼接后,才能得到完整的文件内容。
内容的提问来源于stack exchange,提问作者soheilo0
相关产品推荐
相关产品推荐

