上传文件时截断 Web 套接字块

Posted

技术标签:

【中文标题】上传文件时截断 Web 套接字块【英文标题】:Truncation of web socket chunk while uploading a file 【发布时间】:2014-10-11 03:16:03 【问题描述】:

我已尝试搜索我面临的这个奇怪问题,但在网络上找不到任何内容。 以下是我想要做的。

从用户浏览器上传文件到运行在不同环境中的播放服务器

以下是我面临的问题。

块在到达 Play 服务器之前被截断

观察:

Chunk 是从 java 脚本在客户端正确创建的,websocket.send() 正在将正确的 chunk 传递给 Play。

在 Play 服务器上,块以 String 事件对象的形式出现,该对象被截断。

这个问题非常奇怪的是,这仅在某些机器/网络中发生,对于所有其他机器/网络,它工作正常 当尝试使用不同的块大小时,据观察,对于较小的块,许多初始块被正确接收,但后来一个失败 我们已尝试在某些网络上绕过防火墙和代理,以检查如果没有此类限制会发生什么,但仍然失败

请提供可以帮助我调试和修复此问题的输入。我可以提供您想要的任何其他东西,而不是粘贴代码,因为它可以在大多数机器和网络上运行,但在少数机器和网络上失败,所以这似乎不是代码问题

PS。这个问题可以根据人们的观点有很多答案,对于所有 SO 用户,我只需要帮助可能会出错的事情,所以请不要将此标记为不合适

【问题讨论】:

【参考方案1】:

我已经弄清楚了,问题出在谷歌浏览器的最新更新上。我从here(版本 37)下载了 chrome,它开始工作正常。

一段时间后我才知道这个问题是因为 chrome V38 中针对单个消息的多个帧的实现更改,最初它是在单个帧中传输的,所以最终从您的服务器端实现也需要进行更改以处理相同的问题。

我使用的是旧版本的 Play 框架,它没有这种多帧处理实现,所以它会崩溃。

将 Play 更新到 2.2.3 后,它开始正常工作,因为他们在该版本中实现了多帧处理。下面是一些有用的链接

Issue With Latest Chrome

Play Changelog

Changes for Continuation frame handling for WebSockets in Play 2.2.3

【讨论】:

以上是关于上传文件时截断 Web 套接字块的主要内容,如果未能解决你的问题,请参考以下文章

YouTube API 截断视频 [PHP]

CTFHub技能树 Web-文件上传详解

CTFHub技能树 Web-文件上传详解

ctfhub技能树—文件上传—00截断

发布多部分文件上传时的 libevent 块

1010.CTF 题目之 WEB Writeup 通关大全 – 4