允许服务堆栈中的范围请求

时间:2021-06-21 02:26:19

标签: servicestack

最近我们决定在我公司的浏览器中播放一些视频。我们希望支持 Safari、Firefox 和 Chrome。要流式传输视频,Safari 要求我们在 servicestack 中实现范围 http 请求。我们的服务器支持范围请求,如响应中返回的“Accept-Ranges: bytes”标头所示。

查看 previous questions 我们想添加一个预请求过滤器,但我不明白这样做的细节。将此添加到我们的 AppHost.cs 的 configure 函数确实会做一些事情:

PreRequestFilters.Add((req, res) => {
    if (req.GetHeader(HttpHeaders.Range) != null) {
        var rangeHeader = req.GetHeader(HttpHeaders.Range);
        rangeHeader.ExtractHttpRanges(req.ContentLength, out var rangeStart, out var rangeEnd);
        if (rangeEnd > req.ContentLength - 1) {
            rangeEnd = req.ContentLength - 1;
        }
        res.AddHttpRangeResponseHeaders(rangeStart, rangeEnd, req.ContentLength);
    }
});

设置断点可以看到这段代码被命中了。然而 rangeEnd 总是等于 -1,ContentLength 总是等于 0。根据规范,-1 的 rangeEnd 是无效的,所以有些地方是错误的。最重要的是,添加此代码也会破坏 Chrome 中的视频播放。我不确定我是否在正确的轨道上。它不会中断图片的加载。

如果您想通过网络获得响应/请求标头的详细信息,请告诉我。

0 个答案:

没有答案