相关疑难解决方法(0)

内容范围和范围标题之间的区别?

HTTP标头内容范围和范围之间有什么区别?什么时候应该使用?

我正在尝试从特定字节偏移量流式传输音频文件.我应该使用Content-Range还是Range标头?

谢谢

http http-headers

68
推荐指数
2
解决办法
4万
查看次数

iPad/iPhone上的HTTP字节范围协议客户端行为

我正在测试支持HTTP字节范围请求HTTP servlet实现(由BalusC共享).

我发现不同的HTTP客户端之间存在一些特殊的差异,并且想知道我是否遗漏了任何东西.我使用了> 2G mp4视频文件进行测试,并使用Wireshark捕获数据包.这大致是发生的事情:

  • 三星Galaxy SII:

    • 文件的HTTP GET请求到来,要求字节范围 [0; <almost the end of the file>]
    • 服务器响应,开始流式传输文件
    • 每个后续块在同一HTTP响应的范围内提供.没有发送新的HTTP请求(除非视频被快速转发到某个位置).该流码块是相当简单,它读取RandomAccessFile input和写入OutputStream output通过byte[] buffer:

      while ((read = input.read(buffer)) > 0) {
          output.write(buffer, 0, read);
      }
      
      Run Code Online (Sandbox Code Playgroud)
  • iPad 1
    • 文件的HTTP GET请求到来,要求字节范围 [0; <almost the end of the file>]
    • 服务器响应,开始流式传输文件
    • iPad获得一两块,然后单方面决定停止接受来自服务器的字节,并为文件的下一个块发出单独的GET请求.例如,新的范围边界[100, almost the end of the file].视频显示正常.
    • 从第2步开始重复循环.左边界始终向文件末尾移动.

我没有调查连接的确切方式.可能是iPad停止发送TCP ACK数据包,我想这并不重要.

我的问题是,对于每个终止的连接,我都会遇到java.net.SocketException: Broken pipe异常.这不仅会污染日志(这是一个小问题/可解决的问题),但我相信这会影响性能,因为提高异常是非常昂贵的.在观看简单视频时,异常率约为1个异常/秒,但如果服务器有100个并发用户,则JVM可能会花费大量时间来计算堆栈跟踪而不是实际工作.

我也使用iOS 6在iPhone上进行了测试,并且能够观察到与iPad 1相同的行为.重申一下,这 …

java iphone streaming http ipad

12
推荐指数
1
解决办法
4258
查看次数

标签 统计

http ×2

http-headers ×1

ipad ×1

iphone ×1

java ×1

streaming ×1