如果我请求某个范围和未知大小,内容范围是什么样子的。
例如,我的请求是"bytes=100-200",流将以 150 结束。但在我开始流式传输之前我不知道。我应该发送什么作为内容范围标头?
bytes 100-/*
bytes 100-200/*
bytes 100-*/*
或者这根本不是法律情况?
如果请求是开放式的,则相同的问题:"bytes=100-"
如果请求满足的范围,服务器应使用 206(部分内容)响应进行响应。见RFC7233,第4.1节。
如果请求的资源的字节长度小于范围间隔的偏移量,或者结束偏移量超出资源长度,则服务器应使用 416(范围不满足)进行响应。请参阅第 4.4 节。
要跳过内容的前 100 个字节,您确实是正确的,因为请求应包含Range: bytes=100-
标头。请参阅第 2.1 节和第 3.1 节。
就长度未知的资源而言,并且正在以产生不可预测大小的内容块的方式读取:这是不受任何 RFC 批准的未定义行为。指定Content-Range
标头的方式是当前范围或总内容大小未知,但不能同时指定两者。您不能使用 HTTP 信封作为指定范围长度的方法,因为服务器在使用 206 代码响应时必须提供 Content-Range
标头(参见第 4.1 节)。
处理这种情况的正确方法是:
- 验证范围请求
- 尝试从请求的资源中读取足够数量的字节
- 如果可以检索到足够数量的字节,请创建 HTTP 信封,指定范围并附加正文。如果需要,可以切断,
- 在任何其他情况下:使用 416 响应