multipart/x-mixed-replace 是不是等待客户端请求?
Posted
技术标签:
【中文标题】multipart/x-mixed-replace 是不是等待客户端请求?【英文标题】:Does multipart/x-mixed-replace wait for client requests?multipart/x-mixed-replace 是否等待客户端请求? 【发布时间】:2009-01-10 00:29:17 【问题描述】:我试图弄清楚在发送 multipart/xmixed-replace 响应时是否可以减慢服务器速度。我希望我的客户尝试对运动 jpeg 流进行速率限制。我找到了很多关于 server 在 HTTP 响应中发送什么的文档,但没有关于 client 发送什么的文档。
客户端在 multipart/x-mixed-replace 响应中的每个部分之后发送什么(如果有的话)?如果它不发送任何东西,服务器是否只是继续堆积零件?
【问题讨论】:
【参考方案1】:实际上,我认为 multipart 是一个红鲱鱼,因为 multipart 的概念只是在同一消息正文中描述内容类型。因此,从服务器的角度来看(就发送内容的速率而言),它与发送单个大块数据并没有真正的不同。
所以,我想知道 Range 标头是否可以只请求一个特定的范围——一次一个“部分”。
从响应头的末尾开始计算字节数。当您到达第一部分的末尾时,请注意读取的字节数并关闭连接。发送请求 相同的文档,但将起始范围指定为块末尾的字节。再次读取响应,当您到达部分末尾时,将当前响应字节添加到前一个字节,关闭连接并重复令人作呕...
还没有尝试过,但如果服务器支持范围标头并且您能够在客户端进行一些修补,听起来它会起作用。
编写一个通过丢弃数据包来限制速率的客户端代理可能更容易......
【讨论】:
【参考方案2】:尝试使用 Mozilla 的 LiveHTTPHeaders 插件。我去了 Gmail(它使用 AJAX)并跟踪了客户端和服务器之间的对话几分钟。看来这对你有帮助。
【讨论】:
【参考方案3】:在 HTTP 级别,我认为客户端不会发送任何内容。服务器假定只要连接打开,它就可以继续发送响应。
我认为这个问题没有简单的 HTTP 级解决方案,因为客户端-服务器交换中没有“ack”概念。
对于这个问题显然有 TCP-/IP 级别的解决方案。
我想知道当客户端实际接收到服务器的响应标头并识别出响应是多部分的时,它是否可以做一些不同的事情——然后它是否可以中止连接并打开一个新的非保持活动状态并只获取部分一个接一个...
【讨论】:
以上是关于multipart/x-mixed-replace 是不是等待客户端请求?的主要内容,如果未能解决你的问题,请参考以下文章