对部分内容的响应(如果大小未知)。范围请求,如"bytes=100-"



如果我请求某个范围和未知大小,内容范围是什么样子的。

例如,我的请求是"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 节)。

处理这种情况的正确方法是:

  1. 验证范围请求
  2. 尝试从请求的资源中读取足够数量的字节
  • 如果可以检索到足够数量的字节,请创建 HTTP 信封,指定范围并附加正文。如果需要,可以切断,
  • 在任何其他情况下:使用 416 响应

最新更新