【问题标题】:How to force full HTTP delivery when client requests Range?客户端请求 Range 时如何强制完整的 HTTP 传递?
【发布时间】:2014-02-14 07:43:49
【问题描述】:

假设客户端发出如下请求(从 iOS 中提取):

GET /test.mp4 HTTP/1.1
Host: example.com:80
Range: bytes=0-1
X-Playback-Session-Id: 3DFA3BE3-CB22-4EC5-808F-B59A735DCECE
Accept-Encoding: identity
Accept: */*
Accept-Language: en-us
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.11B554a (iPad; U; CPU OS 7_0_4 like Mac OS X; en_us)

还有其他这样的要求,我相信 Chrome 可能会通过要求空白范围来试水。

服务器如何响应任何此类请求,使其不需要遵守 Range ,而是将其视为标准 HTTP 传递,客户端将播放文件?

发送一个常规的标头响应和数据好像客户端没有请求 Range 似乎不起作用。

编辑:相反,如果客户端确实请求范围,是否可以使用 HTTP 206 响应 Content-Length 和 Content-Range 中的完整文件大小标头(哪个客户端会忽略)?

【问题讨论】:

标签: http http-headers


【解决方案1】:

如果服务器不支持Range 标头,它将发送一个正常的200 回复以发送整个文件。如果服务器支持Range 标头,它将发送206416 回复,具体取决于请求的范围是否满足。这在RFC 2616 Section 14.35 中有介绍。

如果客户端没有请求Range,则无法回复206

【讨论】:

  • 奇怪的是,当我尝试将 mp4 提供给 iOS 时,它失败了。客户端要求服务器来满足 Range 请求是否可以接受?
【解决方案2】:

尝试使用 HTTP 1.0 进行响应 - 它根本不支持范围请求。

也许客户会更优雅地对待这样的回复。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 2014-12-21
    • 2023-03-09
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多