如果使用适当的 headers,服务器能否以小于请求范围的 content-length 响应

Can the server respond with content-length less than requested range if proper headers are used

我正在开发一个 Node-JS 服务器,它具有一些视频流的自定义行为。

服务器在根路径 localhost:3000/ 上将文件公开为流并侦听范围请求。在前端有一个 html5 视频播放器,我通过记录注意到它,当您在时间轴上滑动时,请求范围值 current-byte to total-bytes

现在我只是将 file-stream 管道到响应中。

我的方案要求我查询有关相关文件的另一个进程,并且只通过管道传输它允许我访问的文件部分。现在我的问题是,如果播放器请求例如从字节 0 到 1000,我用 0 到 100 响应,并且我设置 headers 如下所示,播放器是否会理解它没有得到它想要的完整数据并做出任何后续请求。

 const range = fromOtherProcess(); // the other process told me this range is allowed
 response.statusCode = 206; // parital content
 response.setHeader('Content-Length', range.end - range.start + 1);
 response.setHeader('Content-Range', 'bytes ' + range.start + '-' + range.end + '/' + size);

如果你不能满足请求的范围,你想用 416 响应,并包含一个 Content-Range header 告诉客户端实际可满足的范围是什么。见

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/416

如果您真的要自己处理范围请求,您可能需要阅读 RFC。您需要优雅地处理格式错误的请求、未知单位、多个范围等。我在上面 link 编辑的页面有一个 link 到当前的 RFC。