Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http范围标头请求整个文件_Http_Webserver - Fatal编程技术网

Http范围标头请求整个文件

Http范围标头请求整个文件,http,webserver,Http,Webserver,我正在使用codeplex 1.1版的。我已经实现了Accept范围标头,它确实有效。但是,当我使用wireshark(1.4.1版(SVN Rev 34476 from/trunk-1.4))捕获流量时,我看到了以下内容: GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1 Host: 10.100.1.199:8081 Accept: */* Range: bytes=0-1 Accept-Encoding: identity Connection

我正在使用codeplex 1.1版的。我已经实现了Accept范围标头,它确实有效。但是,当我使用wireshark(1.4.1版(SVN Rev 34476 from/trunk-1.4))捕获流量时,我看到了以下内容:

GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1
Host: 10.100.1.199:8081
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
X-Playback-Session-Id: 9CED81CC-BFAE-4CF6-A477-0EA62B2C652F

HTTP/1.1 206 PartialContent
Content-Range: bytes 0-1/652965648
Accept-Ranges: bytes
ETag: "0daA8D4/wgt4MFvxdNIPLw=="
Date: Wed, 13 Jun 2012 09:10:18 GMT
Content-Length: 2
Content-Type: video/x-m4v
Server: Tiny WebServer
Connection: keep-alive

..  << 2 bytes data

GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1
Host: 10.100.1.199:8081
Accept: */*
Range: bytes=0-652965647
Accept-Encoding: identity
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
X-Playback-Session-Id: 9CED81CC-BFAE-4CF6-A477-0EA62B2C652F

HTTP/1.1 206 PartialContent
Content-Range: bytes 0-652965647/652965648
Accept-Ranges: bytes
ETag: "0daA8D4/wgt4MFvxdNIPLw=="
Date: Wed, 13 Jun 2012 09:10:18 GMT
Content-Length: 652965648
Content-Type: video/x-m4v
Server: Tiny WebServer
Connection: keep-alive
阅读后,每当我收到整个文件的范围请求时,我都会尝试发送一个较短的范围。但这根本不起作用

我想知道:

  • 是整个文件的范围请求是iOS中的某种缺陷(在4.3.3中也可以看到),我希望在回放后出现类似于
    range:bytes=0-1
    range:bytes=0-65535/652965648
  • 我是否可以优雅地拒绝这个大请求,并告诉被请求者我可以立即提供最大尺寸?(我在RFC中找不到)
  • IIS只是在一定字节数后中止此请求吗
  • 编辑:对于数字3:不是IIS,但浏览器似乎只是中止(并关闭)连接。然后提出新的要求。我无法想象范围请求是为了请求整个文件或文件的很大一部分

    编辑:在iOS7中,它似乎已经改变了。第一个范围请求仍然相同(字节0-1)。之后,我看到上面提到的2或3个范围请求,其中最后一个请求持续传输字节更长时间。但是,仍然会执行多个请求

  • 是整个文件的范围请求是iOS中的某种错误(在4.3.3中也可以看到),我希望范围是:bytes=0-1,在重放之后,范围是:bytes=0-65535/652965648
  • 我不知道这是不是一只虫子。但是,我可以想到媒体播放器在一次请求中请求整个文件的原因。通过这种方式,媒体播放器获得一个数据流,从中可以从头到尾读取所有数据

    一旦媒体播放器从流中读取足够的数据,它就可以开始播放媒体文件。然后,它选择媒体播放时在后台缓冲多少数据。对此,可能有几种不同的方法:

    • 急切地缓冲整个媒体文件。当带宽便宜时(用户不支付或支付固定的数据传输费率),这是一个很好的策略。假设用户希望查看/收听整个媒体文件

    • 延迟缓冲刚好足以避免延迟。当带宽昂贵时(用户按字节付费),这是一个很好的策略

      在理想的设置中,媒体播放器根本不需要缓冲任何内容,而是在实时播放媒体时解码流中的数据。然而,这将要求底层网络通道超级稳定,并始终以所需的速度传输数据

      事实并非如此,因此媒体播放器将选择提前几秒或几分钟进行缓冲

    需要注意的是,无论选择何种策略,媒体播放器在单个请求中请求整个资源仍然是有意义的

    但是,在以下情况下,范围请求对媒体播放器至关重要:

    • 连接被中止(出于任何原因)
    • 用户在媒体中领先。(例如,想看电影的10分钟)
    然后,媒体播放器可以关闭最初打开的数据流,并发送所需位置的范围请求

  • 我是否可以优雅地拒绝这个大请求,并告诉被请求者我可以立即提供最大尺寸 不,你不能。范围请求由客户端/浏览器发起,并且服务器声明其支持范围请求(通过
    接受范围
    标题)必须服从客户端并以其请求的任何范围响应


    但是,您可以使用
    传输编码:chunked
    头发送数据。这将使您的服务器能够控制传输的数据量。但是,它仍然是通过单个HTTP连接完成的

    我是,对我来说,这似乎是iPad/iPhone的问题。@MindasYou;我们面临着同样的问题。由于我使用的Web服务器的结构,我没有太多选择,需要重新抛出异常以停止处理范围请求。幸运的是,我在同一时间只有1个客户端连接(但它也可以使用2或3个)。我希望您能得到一些有用的答案。我们在测试中看到的是,safari要求输入前两个字节(范围0-1),然后要求输入整个文件并立即关闭连接,然后要求输入文件的最后几百KB(我怀疑其中包含重要的元数据。Chrome也会这样做),然后,它开始从头到尾以小块的形式请求文件。我怀疑确切的模式会因视频格式的不同而有所不同。@AbhiBeckert:谢谢你的反馈。我从未见过范围请求在文件末尾请求字节,但正如您所提到的,它可能取决于视频文件格式。我们正在使用.m4v文件。您能反馈您使用的文件类型吗?感谢您的广泛反应。我将把它标记为答案。
    GET /ipod/main.m4v HTTP/1.1
    Host: 10.100.1.199
    User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
    Accept: */*
    Range: bytes=0-1
    Accept-Encoding: identity
    X-Playback-Session-Id: C5BBF91D-78AB-42BA-ACE0-D74AB9D845CE
    Connection: keep-alive
    
    HTTP/1.1 206 Partial Content
    Content-Type: video/x-m4v
    Last-Modified: Mon, 11 Jun 2012 10:33:41 GMT
    Accept-Ranges: bytes
    ETag: "7243cabbd47cd1:0"
    Server: Microsoft-IIS/7.5
    X-Powered-By: ASP.NET
    Date: Wed, 13 Jun 2012 09:21:03 GMT
    Content-Length: 2
    Content-Range: bytes 0-1/652965648
    
    ..  << 2 bytes of data
    
    GET /ipod/main.m4v HTTP/1.1
    Host: 10.100.1.199
    User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
    Accept: */*
    Range: bytes=0-652965647
    Accept-Encoding: identity
    X-Playback-Session-Id: C5BBF91D-78AB-42BA-ACE0-D74AB9D845CE
    Connection: keep-alive
    
    HTTP/1.1 206 Partial Content
    Content-Type: video/x-m4v
    Last-Modified: Mon, 11 Jun 2012 10:33:41 GMT
    Accept-Ranges: bytes
    ETag: "7243cabbd47cd1:0"
    Server: Microsoft-IIS/7.5
    X-Powered-By: ASP.NET
    Date: Wed, 13 Jun 2012 09:21:03 GMT
    Content-Length: 652965648
    Content-Range: bytes 0-652965647/652965648
    
    Range: bytes=2162688-652965647 (@ time == 1.646204)
    Range: bytes=4980736-652965647 (@ time == 2.754322)
    Range: bytes=6356992-652965647 (@ time == 2.922479)